如果我的服务器位于路由器后面,如何获取用户的公共IP?
我正在尝试:
protected string GetIPAddress()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ipAddress))
{
string[] addresses = ipAddress.Split(',');
if (addresses.Length != 0)
{
return addresses[0];
}
}
return context.Request.ServerVariables["REMOTE_ADDR"];
}
但我得到的只是路由器网关。
显然,REMOTE_ADDR
不适用于我的情况,HTTP_X_FORWARDED_FOR
也不会。
关于如何在我的案例中获取用户的公共IP的任何想法?
感谢。
答案 0 :(得分:2)
您正在尝试处理IP&在HTTP级别进行路由。
在应用层,数据包已经遍历路由/ IP 层,并且该信息已被删除。
您在HTTP级别看到的数据包与远程端点在应用层级别发送的数据完全相同,因为它没有IP信息,所以查看HTTP标头赢了“帮助恕我直言。
编辑:正如@Marc Gravell所说,一些反向代理会将此信息添加到HTTP标头中。所以你应该检查你的(如果你有一个配置),如果它这样做。
This answer 列出了您可以检查的其他一些服务器变量。
答案 1 :(得分:0)
唯一可靠的方法是联系互联网上的某些已知服务,告诉您它看到您的请求来自哪个IP。当然,该服务必须继续运行并且可以访问或者此功能中断。例如,http://whatismyip.com
答案 2 :(得分:0)
无法获得它。
但是,您可以找到用户是从本地网络还是从网络打开页面。
如果IP是路由器分配给来自网络的请求的IP,那么很明显它来自网络。