Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Request.ServerVariables["REMOTE_ADDR"];
Request.ServerVariables["HTTP_CLIENT_IP"];
Request.UserHostAddress;
上面的都试过了, 内网电脑试过了, 外网电脑也试过了,获取的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
所以获取到的都是路由器的IP
#2
一个公网IP
可以分成多个子网IP
每个子网对外显示的都是公网的IP
你找一个远一个的人试试
可以分成多个子网IP
每个子网对外显示的都是公网的IP
你找一个远一个的人试试
#3
192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS
不过这与你的二级域名有什么关系?
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS
不过这与你的二级域名有什么关系?
#4
有这个修改权限的人下班了,明天叫他试一试
#5
就差找国外的了 ..
#6
特意为这个二级域名开了一个端口,会是因为这个原因么 ?
#1
我猜你的服务器是在某个局域网内部,做了路由器IP地址映射
所以获取到的都是路由器的IP
所以获取到的都是路由器的IP
#2
一个公网IP
可以分成多个子网IP
每个子网对外显示的都是公网的IP
你找一个远一个的人试试
可以分成多个子网IP
每个子网对外显示的都是公网的IP
你找一个远一个的人试试
#3
192.168.1.254 是内网地址
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS
不过这与你的二级域名有什么关系?
显然外网用户是通过端口映射进入的,而192.168.1.254是路由器的内网口
你可以找人将路由器的ip转发设为透明的,这样外网ip就可到达你的IIS
不过这与你的二级域名有什么关系?
#4
有这个修改权限的人下班了,明天叫他试一试
#5
就差找国外的了 ..
#6
特意为这个二级域名开了一个端口,会是因为这个原因么 ?