我已经实现了一个简单的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
答案 0 :(得分:1)
很可能与您的网络服务器前面的负载均衡器或网络设备有关。
鉴于:
REMOTE_ADDR重新运行192.168.130.140
我建议您的运营团队询问该IP运行的机器,以及它如何通过呼叫IP地址(可能通过X-Forwarded-For
)。