我想获取在我的网站上注册的人的IP地址。如何在ASP.NET中实现这一点。我使用了以下代码,但它没有得到正确的IP地址。
string ipaddress = Request.UserHostAddress;
string ipaddress = Request.UserHostAddress;
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;
}
X-Forwarded-For
可以包含多个 IP 地址。 - Gabrielpublic 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;
}
这篇维基百科文章更详细地解释了相关风险。
应该使用HTTP_X_FORWARDED_FOR,但它可能返回用逗号分隔的多个IP地址。请参见此页面。
因此,您应该始终检查它。我个人使用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;
}
ip = (HttpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? "").Split(',').Last().Trim();
- Wouter Simons在MVC 6中,您可以使用以下方式获取IP地址:
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
Context
,为什么还要去请求获取它?这可以简单地写成HttpContext.Connection.RemoteIpAddress.ToString()
。 - Serj Sagan如果客户端通过透明非匿名代理连接,则可以从以下位置获取其地址:
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
如果通过该方法无法获取IP,会返回null或"unknown"。
Request.ServerVariables["REMOTE_ADDR"]
和Request.UserHostAddress
应该是相同的,如果请求不来自非匿名代理,则可以使用其中任何一个。
然而,如果请求来自匿名代理,那么直接获取客户端IP就不可能了。这就是为什么它们称这些代理为匿名代理。
string result = string.Empty;
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ip))
{
string[] ipRange = ip.Split(',');
int le = ipRange.Length - 1;
result = ipRange[0];
}
else
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
le
变量 - 我猜你想在下一行中使用它而不是 0
。 - Hans Kesting