无法在我发布的网站上获取客户端的IP地址

时间:2017-09-09 08:58:24

标签: c# iis asp.net-web-api ip-address infrastructure

我已经实现了一个简单的API,它返回客户端“Request Sender”的ip地址。当我在网络之外时,它总是返回相同的IP地址,当它在网络内部时,它完全正常工作并返回设备的本地IP地址。 该网站托管在IIS上,api逻辑如下:

public static class iphelper
    {
        private const string HttpContext = "MS_HttpContext";
        private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";

        public static string GetClientIpAddress(this HttpRequestMessage request)
        {
            if (request.Properties.ContainsKey(HttpContext))
            {
                dynamic ctx = request.Properties[HttpContext];
                if (ctx != null)
                {
                    return ctx.Request.UserHostAddress;
                }
            }

            if (request.Properties.ContainsKey(RemoteEndpointMessage))
            {
                dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
                if (remoteEndpoint != null)
                {
                    return remoteEndpoint.Address;
                }
            }

            return null;
        }
    }
}

我已经尝试了所有的片段,所有片段都返回相同的片段。我的项目使用ASP.NET MVC C#。

我试过HTTP_X_FORWARDED_FOR总是返回null

1 个答案:

答案 0 :(得分:1)

很可能与您的网络服务器前面的负载均衡器或网络设备有关。

鉴于:

  

REMOTE_ADDR重新运行192.168.130.140

我建议您的运营团队询问该IP运行的机器,以及它如何通过呼叫IP地址(可能通过X-Forwarded-For)。