/// RealIP 的摘要说明:
/// 获得用户的真实ip,由于squidserver的原因直接取到的ip是内网ip
/// </summary>
abstract public class RealIP
{
const string HEADER_KEY_IP = "X-Forwarded-For";
/**//// <summary>
/// 真实ip
/// </summary>
public static string Value
{
get
{
System.Web.HttpRequest request = System.Web.HttpContext.Current.Request;
string ip = string.Empty;
string ipHeader = request.Headers[HEADER_KEY_IP];
if(!string.IsNullOrEmpty(ipHeader))
{
string[] IPs = ipHeader.Split(',');
foreach (string ipItem in IPs)
{
if ((!string.IsNullOrEmpty(ipItem)) && (!IsLocalIP(ipItem)))
{
ip = ipItem;
break;
}
}
}
if(ip == string.Empty)ip = request.UserHostAddress;
return ip;
}
}
static bool IsLocalIP(string ip)
{
return ip.StartsWith("192.168.") || ip.StartsWith("172.16.") || ip.StartsWith("10.");
}
}
其原理就是局域网内的服务器,向真实real server转发请求时,将客户端用户的真实ip放到了Http头信息中。