我正在本地主机上运行一个用Visual Studio提供的ASP.NET MVC应用程序。我想要获取IP地址。我尝试过:
Request.UserHostAddress
和
Request.ServerVariables("REMOTE_ADDR")
在这两种情况下,我都会得到::1作为结果。这是什么?我为什么会得到它?我怎样才能得到127.0.0.1或192.168.1.xxx?
我正在本地主机上运行一个用Visual Studio提供的ASP.NET MVC应用程序。我想要获取IP地址。我尝试过:
Request.UserHostAddress
和
Request.ServerVariables("REMOTE_ADDR")
在这两种情况下,我都会得到::1作为结果。这是什么?我为什么会得到它?我怎样才能得到127.0.0.1或192.168.1.xxx?
你正在获得有效的IP地址;::1
是IPv6的本地主机。
当您调用“localhost”时所看到的是有效的。::1是IPv6环回地址,相当于IPv4中的127.0.0.1。
不要调用:
http://localhost/...
调用:
http://{machinename}/...
或者http://127.0.0.1/...
或者http://192.168.1.XXX/...
[将{machinename}替换为您机器的计算机名称。 将XXX替换为您计算机的IP地址。]
调用MVC应用程序的任何人都将得到他们的有效IP地址。 如果客户端是IPv6主机,则将保存其IPv6 IP地址。 如果客户端是IPv4主机,则将保存其IPv4 IP地址。
如果您始终希望保存IPv4地址,请查看此文章,了解如何使用简单类来实现它:https://web.archive.org/web/20211020102847/https://www.4guysfromrolla.com/articles/071807-1.aspx。 您应该能够借鉴他们的示例并构建一个快速的辅助方法来实现此目标。
Request.Params["REMOTE_ADDR"]
使用Request.ServerVariables("REMOTE_ADDR")
的替代方法
127.0.0.1 localhost
# ::1 localhost
以下代码是我用来查找IP地址的
public static string GetIp()
{
var Request = HttpContext.Current.Request;
try
{
Console.WriteLine(string.Join("|", new List<object> {
Request.UserHostAddress,
Request.Headers["X-Forwarded-For"],
Request.Headers["REMOTE_ADDR"]
})
);
var ip = Request.UserHostAddress;
if (Request.Headers["X-Forwarded-For"] != null)
{
ip = Request.Headers["X-Forwarded-For"];
Console.WriteLine(ip + "|X-Forwarded-For");
}
else if (Request.Headers["REMOTE_ADDR"] != null)
{
ip = Request.Headers["REMOTE_ADDR"];
Console.WriteLine(ip + "|REMOTE_ADDR");
}
return ip;
}
catch (Exception ex)
{
Log.WriteInfo("Message :" + ex.Message + "<br/>" + Environment.NewLine +
"StackTrace :" + ex.StackTrace);
}
return null;
}
public static string GetIP4Address(string ip) {
try {
var hostNames = Dns.GetHostEntry(ip);
var ipv4 = hostNames.AddressList.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
if(ipv4 != null) {
return ipv4.ToString();
}
} catch(Exception ex) {
log.WarnFormat("Error When Getting Client Ipv4");
}
return ip;
}