在此之前,我知道这个问题是重复的,但让我讲述我的问题
正如This Link所示,Request.UserHostAddress
仅捕获代理服务器或路由器的IP地址
因此我使用此代码返回用户IP地址:
string ip = String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_FORWARDED_FOR"]) ? Request.ServerVariables["REMOTE_ADDR"] : Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',')[0];
但是当我连接电脑时它总是返回172.30.1.1
,
另一方面,我的手机连接到电信3G网络
当我通过电话连接再次返回172.30.1.1
时。
我也使用这段代码:
public static string GetIP4Address()
{
string IP4Address = String.Empty;
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
}
但结果相同。
那么如何返回用户的真实IP地址?
提前致谢。
答案 0 :(得分:0)
编辑:之前误解了这个问题。
这确实是一个不正确的查找,为什么它返回代理/路由器IP地址Request.ServerVariables("REMOTE_ADDR")
是像rapidshare这样的网站用来限制下载作为一个群组,并没有真正有用。
您要做的是将HTTP_X_FORWARDED_FOR
变量与它进行比较,以检查是否存在非透明代理。
同样如此:
' Look for a proxy address first
Dim _ip As String = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
' If there is no proxy, get the standard remote address
If (_ip = "" Or _ip.ToLower = "unknown") Then _
_ip = Request.ServerVariables("REMOTE_ADDR")
更多样本:
<强> C#强>
// Look for a proxy address first
String _ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
// If there is no proxy, get the standard remote address
If (_ip == "" || _ip.ToLower == "unknown")
_ip = Request.ServerVariables["REMOTE_ADDR"];
<强> ASP / VBScript的强>
ipaddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
if ipaddress = "" then
ipaddress = Request.ServerVariables("REMOTE_ADDR")
end if