在内网服务器中获得真正的客户端ip的方法
生活随笔
收集整理的这篇文章主要介绍了
在内网服务器中获得真正的客户端ip的方法
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
如下代码: /**//// <summary>
/// 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头信息中。
/// 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头信息中。
总结
以上是生活随笔为你收集整理的在内网服务器中获得真正的客户端ip的方法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 我们的2008。。。。。。
- 下一篇: 页面传值-laber