我已经实现了一个简单的API,它返回客户端"Request“的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
发布于 2017-10-15 22:46:01
最有可能的是,它是与负载均衡器或网络设备在前面,您的web服务器。
鉴于此:
REMOTE_ADDR重播192.168.130.140
我建议询问您的运营团队,在该IP上运行的是哪台机器,以及它如何通过调用IP地址(可能通过X-Forwarded-For)。
https://stackoverflow.com/questions/46128925
复制相似问题