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

时间:2012-11-01 12:31:12

标签: c# asp.net ip 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_FOR也不会。

关于如何在我的案例中获取用户的公共IP的任何想法?

感谢。

3 个答案:

答案 0 :(得分:2)

您正在尝试处理IP&在HTTP级别进行路由。

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

您在HTTP级别看到的数据包与远程端点在应用层级别发送的数据完全相同,因为它没有IP信息,所以查看HTTP标头赢了“帮助恕我直言。

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

This answer 列出了您可以检查的其他一些服务器变量。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

无法获得它。

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

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