Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获得客户';IP地址_C#_Asp.net_Ip - Fatal编程技术网

C# 获得客户';IP地址

C# 获得客户';IP地址,c#,asp.net,ip,C#,Asp.net,Ip,我正在开发一个ASP.NET项目,需要确定客户端的IP地址 目前,我们的生产服务器上有以下代码 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); 返回与生产服务器的IP地址位于同一子网中的IP地址(即,不解决我的问题,因为它不是 客户端的IP地址) 然而,在我们的测试服务器上,同一行代码返回客户机的IP地址(期望的结果)。有人知道为什么吗 我尝试在以下值中使用上述代码子行,所有这些值都返回null或空字

我正在开发一个ASP.NET项目,需要确定客户端的IP地址

目前,我们的生产服务器上有以下代码

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
返回与生产服务器的IP地址位于同一子网中的IP地址(即,不解决我的问题,因为它不是 客户端的IP地址)

然而,在我们的测试服务器上,同一行代码返回客户机的IP地址(期望的结果)。有人知道为什么吗

我尝试在以下值中使用上述代码子行,所有这些值都返回null或空字符串:

"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR"
"HTTP_X_FORWARDED"
"HTTP_X_REAL_IP"
"HTTP_VIA"
"HTTP_COMING_FROM"
"HTTP_FORWARDED_FOR"
"HTTP_FORWARDED"
"HTTP_FROM"
"HTTP_PROXY_CONNECTION"
"CLIENT_IP"
"FORWARDED"
作为替代方案,我发现以下代码返回一个IP数组,并包含客户端的IP地址(在索引4处):

在调试时,我注意到addr中的IPAddress对象要么(A)地址错误(如果是IPv6地址),要么(B)ScopeId错误 如果是IPv4地址。这些错误似乎不是问题,但我不确定一旦投入生产,它们是否会起作用


有没有比这里更好的方法来获取客户端的IP地址?

获取当前HTTP请求的HttpRequestBase对象

Request.UserHostAddress

您可以获取客户端的IP地址。

获取当前HTTP请求的HttpRequestBase对象

Request.UserHostAddress

您可以获取客户端的IP地址。

您可以使用此功能获取IP地址

    private string GetUserIP()
    {
        string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipList))
        {

            var ips= ipList.Split(',');
            return ips[ips.Length - 1];
        }

        return Request.ServerVariables["REMOTE_ADDR"];
    }

注意:头的HTTP_X_转发_可能有多个IP。正确的IP是最后一个。

您可以使用此功能获取IP地址

    private string GetUserIP()
    {
        string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipList))
        {

            var ips= ipList.Split(',');
            return ips[ips.Length - 1];
        }

        return Request.ServerVariables["REMOTE_ADDR"];
    }

注意:头的HTTP_X_转发_可能有多个IP。正确的IP是最后一个。

您的生产流量是否通过负载平衡器?它可以用负载平衡器的地址替换远程地址。负载平衡器可能需要配置为将原始IP地址添加到的HTTP\u X\u FORWARDED\u。这可能有助于您的生产流量通过负载平衡器吗?它可以用负载平衡器的地址替换远程地址。负载平衡器可能需要配置为将原始IP地址添加到的HTTP_X_FORWARDED_。这可能有助于使用HTTP_X_FORWARDED_FOR一致返回空字符串。和REMOTE_ADDR返回不正确的生产服务器IP地址。使用HTTP_X_FORWARDED_FOR一致返回空字符串。远程地址返回生产服务器的错误IP地址。