日期:2014-05-17  浏览次数:20543 次

.net中获取IP问题
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR "]
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
HttpContext.Current.Request.ServerVariables["HTTP_VIA"];
都可以获取IP http://nrshwm.blog.163.com/blog/static/14060694120104435759203/ 这里说了有5中代理情况下他们的区别 问题是我怎么获得正确的客户端IP呢 如果是使用高匿名代理服务器的情况 通过上面三个属性更本就获得不到嘛 还有什么其他方法吗 求高手指教 小弟在感激不尽

------解决方案--------------------
没有办法。

你可以把高匿代理想象成这样:

代理服务器收到代理请求,他亲自访问你的服务器,就像他自己主动浏览一样。你有什么办法知道他是在为一个用户代理,还是他自己主动来访问?
------解决方案--------------------
/// <summary>
/// 获取客户IP
/// </summary>
/// <returns></returns>
public static string GetClientIP()

//Socket tcpclient = tcpListener.AcceptSocket();
//NetworkStream stream = new NetworkStream(tcpclient, System.IO.FileAccess.ReadWrite, true);
//IPEndPoint remoteIP = (IPEndPoint)(tcpclient.RemoteEndPoint);

string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}
------解决方案--------------------
不知道那个免费的IP服务是不是满足你的要求,就是网上人家提供的webservice接口。
------解决方案--------------------
探讨
还有就是如果 某个局域网内的机子访问了服务器(服务器不在局域网内) 那么HttpContext.Current.Request.ServerVariables["REMOTE_ADDR "]
获得是那个局域网的网关IP吗