获取客户端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
浙公网安备 33010602011771号