繁体   English   中英

如果服务器在路由器后面,如何获取用户的公共IP?

[英]How to get user's public IP if the server is behind a router?

如果我的服务器在路由器后面,如何获取用户的公共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_FORHTTP_X_FORWARDED_FOR

在我的情况下,如何获得用户的公共IP有什么想法?

谢谢。

您正在尝试在HTTP级别处理IP和路由。

应用层 ,数据包已经遍历了路由/ IP层,并且该信息已被剥离。

您在HTTP级别看到的数据包与远程端点在其应用层级别发送的数据包完全相同,因为它没有IP信息,因此在HTTP标头中查找将不会帮助恕我直言。

编辑:正如@Marc Gravell所说,一些反向代理确实将此信息添加到HTTP标头中。 因此,如果这样做,则应检查您的(如果已配置)。

该答案列出了您可以检查的其他一些服务器变量。

唯一可靠的方法是访问Internet上的某些已知服务,该服务会告诉您看到您的请求来自哪个IP。 当然,该服务必须继续运行并且可以访问,否则此功能将中断。 例如, http://whatismyip.com

没有办法。

但是,您可以找到用户是从本地网络还是从网络打开页面。

如果IP是路由器分配给来自Web的请求的IP,那么很显然它来自Web。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM