【问题标题】:User IP Address , Using Proxy or Not用户IP地址,是否使用代理
【发布时间】:2025-12-15 05:35:01
【问题描述】:

请看下面的代码:

    private string GetUserIPAddress()
    {
        string User_IPAddress = string.Empty;
        string User_IPAddressRange = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(User_IPAddressRange))//without Proxy detection
        {
            User_IPAddress = Request.ServerVariables["REMOTE_ADDR"];
            //or
            //Client_IPAddress = Request.UserHostAddress;
            //or
            //User_IPAddress = Request.ServerVariables["REMOTE_HOST"];
        }
        else////with Proxy detection
        {
            string[] splitter = { "," };
            string[] IP_Array = User_IPAddressRange.Split(splitter,
                                                          System.StringSplitOptions.None);

            int LatestItem = IP_Array.Length - 1;
            User_IPAddress = IP_Array[LatestItem - 1];
            //User_IPAddress = IP_Array[0];
        }
        return User_IPAddress;
    }

如果是:
1-

User_IPAddress = Request.ServerVariables["REMOTE_ADDR"];

Client_IPAddress = Request.UserHostAddress;

User_IPAddress = Request.ServerVariables["REMOTE_HOST"];
下线或中线是其他线的替代线吗?
请您给我们一些关于这些行的解释吗?
有什么区别 ?

2-
User_IPAddress = IP_Array[LatestItem - 1];

User_IPAddress = IP_Array[0];

我应该使用哪条线路?
请您解释一下这些行吗?

【问题讨论】:

  • 合并的问题,请勿删除。

标签: c# asp.net proxy ip-address


【解决方案1】:

我不知道这个类,但很有可能 Request.UserHostAddress 是 Request.ServerVariables["REMOTE_ADDR"] 的别名。 REMOTE_HOST 也是主机名,但在大多数情况下只是 IP 地址。

X-Forwarded-For的格式是client1, proxy1, proxy2。所以你想要第二个。 User_IPAddress = IP_Array[0];

只要记住“Since it is easy to forge an X-Forwarded-For field the given information should be used with care.

【讨论】: