我想获取在我的网站上注册的IP地址。如何在ASPNET中执行此操作。我使用了以下代码,但是,它没有获得正确的IP地址
string ipaddress = Request.UserHostAddress;
答案 0 :(得分:65)
您可以使用此方法获取客户端计算机的IP地址。
public static String GetIP()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return ip;
}
答案 1 :(得分:37)
在您使用IP地址进行安全性的情况下,您应该了解您的基础架构。
如果您在Web服务器和设置标题的客户端之间使用代理,则应该能够信任最后一个地址。然后你使用像穆罕默德建议的代码更新,以始终从转发头获取最后一个IP地址(见下面的代码)
如果您不使用代理,请注意X-Forwarded-For标头很容易欺骗。我建议你忽略它,除非你有明确的理由不这样做。
我更新了Muhammed Akhtar的代码如下,以便您选择:
public string GetIP(bool CheckForward = false)
{
string ip = null;
if (CheckForward) {
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
if (string.IsNullOrEmpty(ip)) {
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} else { // Using X-Forwarded-For last address
ip = ip.Split(',')
.Last()
.Trim();
}
return ip;
}
这Wikipedia article更彻底地解释了风险。
答案 2 :(得分:34)
应该使用HTTP_X_FORWARDED_FOR但是它可以返回由逗号分隔的多个IP地址。见this page。
所以你应该经常检查它。我个人使用Split功能。
public static String GetIPAddress()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
else
ip = ip.Split(',')[0];
return ip;
}
答案 3 :(得分:7)
在MVC 6中,您可以通过以下方式检索IP地址:
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
答案 4 :(得分:3)
如果客户通过透明的非匿名代理进行连接,您可以从以下地址获取其地址:
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
如果无法以这种方式获得IP,则可以返回null或“unknown”。
Request.ServerVariables["REMOTE_ADDR"]
应与Request.UserHostAddress
相同,如果请求不是来自非匿名代理,则可以使用其中任何一个。
但是,如果请求来自匿名代理,则无法直接获取客户端的IP。这就是为什么他们称这些代理匿名。
答案 5 :(得分:-1)
setSize