获取客户端IP

1. 没有使用代理服务器的情况: 
    REMOTE_ADDR                 您的IP 
    HTTP_VIA                      没数值或不显示 
    HTTP_X_FORWARDED_FOR   没数值或不显示 
 
2. 使用透明代理服务器的情况:Transparent Proxies 
    REMOTE_ADDR                  最后一个代理服务器IP  
    HTTP_VIA                       代理服务器IP 
    HTTP_X_FORWARDED_FOR    您的真实IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。 
 
    -这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。 
 
3. 使用普通匿名代理服务器的情况:Anonymous Proxies 
    REMOTE_ADDR                  最后一个代理服务器IP  
    HTTP_VIA                    代理服务器IP 
    HTTP_X_FORWARDED_FOR    代理服务器IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。 
 
    -隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。 
 
4. 使用欺骗性代理服务器的情况:Distorting Proxies 
    REMOTE_ADDR                 代理服务器IP  
    HTTP_VIA                        代理服务器IP  
    HTTP_X_FORWARDED_FOR     随机的IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。 
     
    -告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。 
 
5. 使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies) 
    REMOTE_ADDR                   代理服务器 IP 
    HTTP_VIA                     没数值或不显示 
    HTTP_X_FORWARDED_FOR     没数值或不显示,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。 
 
    -完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。 
6. 如何获取客户端ip(示例代码)
    代码如下:

/// <summary> 
/// 获取客户端IP 
/// </summary> 
/// <returns>客户端IP</returns> 
public static string GetClientIp() 
{ 
	string clientIp = string.Empty; 
	//代理服务器ip
	if (string.IsNullOrEmpty(GetServerVariableString("HTTP_X_FORWARDED_FOR"))) 
	{ 
		//代理服务器ip 
		if (string.IsNullOrEmpty(GetServerVariableString("HTTP_VIA")))
		{ 
			//客户端真实ip
			clientIp = GetServerVariableString("REMOTE_ADDR"); 
		} 
		else 
		{ 
			clientIp = GetServerVariableString("HTTP_VIA"); 
		}
	}
	else
	{
		clientIp = GetServerVariableString("HTTP_X_FORWARDED_FOR");
	}
	return clientIp;
}

 注释:这个也不是准确的方法,如果客户端想要可以避开,很难检测到真实客户端ip

 

posted on 2015-04-22 13:05  张无季  阅读(132)  评论(0)    收藏  举报