http代理相关知识
关键就在HTTP_X_FORWARDED_FOR
使用不同种类代理服务器,上面的信息会有所不同:
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的
String ip = HttpContext.Current.Request.ServerVariables["X-Forwarded-For"];
if (ip == null || ip.Length == 0 || string.Compare("unknown",ip,true)==0)
{
ip = HttpContext.Current.Request.ServerVariables["Proxy-Client-IP"];
}
if (ip == null || ip.Length == 0 || string.Compare("unknown",ip,true)==0)
{
ip = HttpContext.Current.Request.ServerVariables["WL-Proxy-Client-IP"];
}
if (ip == null || ip.Length == 0 || string.Compare("unknown",ip,true)==0)
{
ip = HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"];
}
if (ip == null || ip.Length == 0 || string.Compare("unknown",ip,true)==0)
{
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
if (ip == null || ip.Length == 0 || string.Compare("unknown",ip,true)==0)
{
// ip = HttpContext.Current.Request.getRemoteAddr();
ip = HttpContext.Current.Request.ServerVariables.Get("Remote_Addr").ToString();
}
return ip;