无法在我发布的网站上获取客户端的 IP 地址
Cant Get the IP Address Of the client On my Published Website
我实现了一个简单的 API,return 是客户端 "Request Sender" 的 IP 地址。当我在网络外部时,它总是 returns 相同的 ip 地址,而在网络内部时它工作得很好并且它 returns 是设备的本地 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;
}
}
}
我已经尝试了所有的片段,return都一样。我的项目使用 ASP.NET MVC C#。
我试过 HTTP_X_FORWARDED_FOR 总是 return 没有
很可能它与负载平衡器或网络设备有关在您的网络服务器之前。
鉴于:
REMOTE_ADDR reruns 192.168.130.140
我建议询问您的运营团队 运行 该 IP 上的机器是什么,以及它如何通过调用 IP 地址(可能通过 X-Forwarded-For
)。
我实现了一个简单的 API,return 是客户端 "Request Sender" 的 IP 地址。当我在网络外部时,它总是 returns 相同的 ip 地址,而在网络内部时它工作得很好并且它 returns 是设备的本地 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;
}
}
}
我已经尝试了所有的片段,return都一样。我的项目使用 ASP.NET MVC C#。
我试过 HTTP_X_FORWARDED_FOR 总是 return 没有
很可能它与负载平衡器或网络设备有关在您的网络服务器之前。
鉴于:
REMOTE_ADDR reruns 192.168.130.140
我建议询问您的运营团队 运行 该 IP 上的机器是什么,以及它如何通过调用 IP 地址(可能通过 X-Forwarded-For
)。