怎么读取客户端用户的内网IP,咋老读的是公网IP
系统是部署在内网,用户分配了一个内网IP,但可以上网,在系统程序里怎么读取用户内网的IP
string uip = "";
if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
uip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
uip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
这个好像读取的是用户公网IP
------解决方案--------------------获取不到------解决方案--------------------
如果服务器和客户端都在同一个网段里面,也就是说中间没有经过其他路由的地址转换,你怎么写这个IP地址都好获得,ServerVariables里面有好几个都指向这个地址。
但是如果服务器和客户端之间经过互联网连接,是不可以的,sp1234 已经讲得很清楚了,你这样写在服务器端获得的地址仍然是客户端通过层层路由转交或者NAT之后的IP地址,不是你所谓的静态IP地址(你这个静态IP的说法其实就是本地hub或者路由器分配的一个ip地址,比如192.168.*.*)。如果真的想获得这个IP地址甚至MAC地址,IE里面可以启用ActiveX控件+Javascript去调用WMI获得,其他浏览器也要写相应的插件获得;当然你自己写一个客户端再嵌入一个浏览器的方法也未尝不可,如果仅仅想用简单一两句话来获得得到几乎不可能。
如果是互联网应用,你这个IP地址绑定有何意义?我随便换一个机房设置同样的地址分配,你怎么知道是从你原来绑定的地方来的,即使是MAC地址的绑定意义也不大(JS获取MAC地址你可以参考:http://www.cnblogs.com/0banana0/archive/2011/11/02/2232655.html,浏览器又只能使用IE了);所以你必须确认你这样做的目的是什么,否则浪费在这个上面的时间太多结果又是一个无效方案,得不偿失
更多参考可以看看这里:http://superuser.com/questions/63124/is-it-possible-to-get-the-nat-ip-address