获取用户';s本地IP-始终获得192.168.2.1

获取用户';s本地IP-始终获得192.168.2.1,ip,httpcontext,Ip,Httpcontext,我需要为我的ASP.NET应用程序获取用户的本地IP,我正在使用此方法: protected string GetIPAddress() { System.Web.HttpContext context = System.Web.HttpContext.Current; string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!string.IsNullOrEmpt

我需要为我的ASP.NET应用程序获取用户的本地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"];
}
但是,当我发布我的网站时,无论用户从何处打开网站,我都会得到
192.168.2.1


有人知道如何解决这个问题吗?

一些网络设备使用。您应该检查命中您的应用程序的请求是否有此头。

您可以从
HTTP\u X\u FORWARDED\u获取客户端的IP地址,用于
远程地址

var ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (string.IsNullOrEmpty(ipAddress ))
{
    ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

return ipAddress;

192.168.2.1
那可能是路由器网关。你的服务器在路由器后面吗?我需要检查用户是否从一定范围的IP打开了网站,但我不能这样做,因为我总是得到192.168.2.1@Alvinwongt当前的答案有点证明了这里多次提出的观点-始终发布你的相关代码,不管它是否来自之前的SO答案。不要期望人们关注到任何地方的链接。=)采纳建议,post-edited@J.steenth服务器位于使用端口转发的路由器后面,因此连接总是连接到路由器并NAT到您的服务器,因此
REMOTE\u ADDR
无法工作。我想这就是为什么
HTTP\u X\u FORWARDED\u FOR
也不起作用的原因。海报上说,链接中的代码是遵循的,这意味着使用了X-FORWARDED-FOR。我尝试了完全相同的方法,但无论用户从何处打开网站,我总是得到192.168.2.1。。。。正如OP已经做的那样,如果他使用链接答案中的代码。