所有用户的IP地址始终相同

时间:2016-09-26 08:39:02

标签: asp.net

在此之前,我知道这个问题是重复的,但让我讲述我的问题

正如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地址?

提前致谢。

1 个答案:

答案 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