二级域名下,网站获取用户IP均为同一个,这是哪里出了问题呢,要通过怎样的方法才能获取到用户的真实IP ?

时间:2022-06-16 14:40:14
Request.ServerVariables["HTTP_VIA"];
Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Request.ServerVariables["REMOTE_ADDR"];
Request.ServerVariables["HTTP_CLIENT_IP"];
Request.UserHostAddress;
上面的都试过了, 内网电脑试过了, 外网电脑也试过了,获取的IP不是空,就是同一个IP
通过上面获取到的IP如下:
二级域名下,网站获取用户IP均为同一个,这是哪里出了问题呢,要通过怎样的方法才能获取到用户的真实IP ?

也曾试过网上其他代码,比如:
//#region GetIP
        public static string GetIP()
        {
            string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

           if (result != null && result != String.Empty)
            {//可能有代理 
                if (result.IndexOf(".") == -1) result = null;
                else
                {
                    if (result.IndexOf(",") != -1)
                    {//有“,”,估计多个代理。取第一个不是内网的IP。 
                        result = result.Replace(" ", "").Replace("'", "");
                        string[] temparyip = result.Split(",;".ToCharArray());
                        for (int i = 0; i < temparyip.Length; i++)
                        {
                            if (IsIPAddress(temparyip[i])
                                && temparyip[i].Substring(0, 3) != "10."
                                && temparyip[i].Substring(0, 7) != "192.168"
                                && temparyip[i].Substring(0, 7) != "172.16.")
                            {
                                return temparyip[i];    //找到不是内网的地址 
                            }
                        }
                    }
                    else if (IsIPAddress(result)) //代理即是IP格式 
                        return result;
                    else
                        result = null;    //代理中的内容 非IP,取IP 
                }
            }

            string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null
               && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty)
                ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
               : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

            if (null == result || result == String.Empty)
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

            if (result == null || result == String.Empty)
                result = HttpContext.Current.Request.UserHostAddress;

           return result;
}

网上能找到的方法好像都试过了,还是不行,获取的还是同一IP,神秘的192.168.1.254,不知道具体是哪层代理出了问题,有类似问题的是用了cdn加速,但是我的这个网站是基于.Net没有什么cdn加速,是一个二级域名,有关于域名设置的我没有权限查看更无法修改,有人遇到过么 ?能猜出是哪里出了问题么?有其他途径获取访问者IP么 ???
分不多  解惑!

6 个解决方案

#1


我猜你的服务器是在某个局域网内部,做了路由器IP地址映射
所以获取到的都是路由器的IP

#2


一个公网IP
可以分成多个子网IP

每个子网对外显示的都是公网的IP

你找一个远一个的人试试

#3


192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS

不过这与你的二级域名有什么关系?

#4


引用 3 楼 xuzuning 的回复:
192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS

不过这与你的二级域名有什么关系?

有这个修改权限的人下班了,明天叫他试一试  

#5


引用 2 楼 moonwrite 的回复:
一个公网IP
可以分成多个子网IP

每个子网对外显示的都是公网的IP

你找一个远一个的人试试

就差找国外的了 ..

#6


引用 1 楼 Z65443344 的回复:
我猜你的服务器是在某个局域网内部,做了路由器IP地址映射
所以获取到的都是路由器的IP

特意为这个二级域名开了一个端口,会是因为这个原因么 ? 

#1


我猜你的服务器是在某个局域网内部,做了路由器IP地址映射
所以获取到的都是路由器的IP

#2


一个公网IP
可以分成多个子网IP

每个子网对外显示的都是公网的IP

你找一个远一个的人试试

#3


192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS

不过这与你的二级域名有什么关系?

#4


引用 3 楼 xuzuning 的回复:
192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS

不过这与你的二级域名有什么关系?

有这个修改权限的人下班了,明天叫他试一试  

#5


引用 2 楼 moonwrite 的回复:
一个公网IP
可以分成多个子网IP

每个子网对外显示的都是公网的IP

你找一个远一个的人试试

就差找国外的了 ..

#6


引用 1 楼 Z65443344 的回复:
我猜你的服务器是在某个局域网内部,做了路由器IP地址映射
所以获取到的都是路由器的IP

特意为这个二级域名开了一个端口,会是因为这个原因么 ?