如何获得用户的公网IP,如果服务器是在路由器后面?(How to get user's pu

2019-08-02 04:38发布

我怎样才能得到用户的公网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在我的情况下,任何的想法?

谢谢。

Answer 1:

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

应用层 ,数据包已经走过了路由/ IP层和信息已被剥离出来。

您在HTTP级别看到的数据包完全按照他的应用层的水平,这是没有的IP信息的远程端点发送出去,所以看在HTTP标头将不恕我直言帮助。

编辑:由于@Marc Gravell说,一些反向代理做的信息添加到HTTP标头。 所以,你应该检查你的(如果你有一个配置),如果做到这一点。

这个答案列出了一些其他的服务器变量,你可以检查。



Answer 2:

唯一可靠的方法是接触到互联网,将告诉你什么IP它看到你的要求来自哪里的一些已知的服务。 当然,服务必须继续工作,并前往,或此功能失效。 例如, http://whatismyip.com



Answer 3:

没有得到它的方式。

但是,你可以发现用户是否从本地网络或从网上打开该网页。

如果IP路由器分配给从网络传来的请求的IP,那么很显然它来自网上。



文章来源: How to get user's public IP if the server is behind a router?