/// <summary>
/// 获取真ip
/// </summary>
/// <returns></returns>
public string GetRealIP()
{
string result = String.Empty;
result = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; //可能有代理
if (!string.IsNullOrWhiteSpace(result))
{
//没有"." 肯定是非IP格式
if (result.IndexOf(".") == -)
{
result = null;
}
else
{
//有",",估计多个代理。取第一个不是内网的IP。
if (result.IndexOf(",") != -)
{
result = result.Replace(" ", string.Empty).Replace("\"", string.Empty);
string[] temparyip = result.Split(",;".ToCharArray());
if (temparyip != null && temparyip.Length > )
{
for (int i = ; i < temparyip.Length; i++)
{
//找到不是内网的地址
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(, ) != "10."
&& temparyip[i].Substring(, ) != "192.168"
&& temparyip[i].Substring(, ) != "172.16.")
{
return temparyip[i];
}
}
}
}
//代理即是IP格式
else if (IsIPAddress(result))
{
return result;
}
//代理中的内容非IP
else
{
result = null;
}
}
} if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.UserHostAddress;
}
return result;
}
public bool IsIPAddress(string str)
{
if (string.IsNullOrWhiteSpace(str) || str.Length < || str.Length > )
return false; string regformat = @"^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})";
Regex regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(str);
}