.net 获取客户端外网ip
IPHelper.cs
public class IPHelper
{
public static string GetClientIP()
{
return GetClientIP(HttpContext.Current);
}
public static string GetClientIP(HttpContext context)
{
string text = string.Empty;
text = context.Request.ServerVariables["HTTP_CDN_SRC_IP"];
if (!string.IsNullOrEmpty(text) && IsIPAddress(text) && !IsInnerIP(text))
{
return text;
}
text = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(text))
{
if (text.IndexOf(".") < -1)
{
text = null;
}
else if (text.IndexOf(",") > -1 || text.IndexOf(";") > -1)
{
text = text.Replace(" ", "").Replace("'", "").Replace("\"", "");
string[] array = text.Split(",;".ToCharArray());
for (int i = 0; i < array.Length; i++)
{
if (IsIPAddress(array[i]) && !IsInnerIP(array[i]))
{
return array[i];
}
}
}
else
{
if (IsIPAddress(text) && !IsInnerIP(text))
{
return text;
}
text = null;
}
}
if (string.IsNullOrEmpty(text))
{
text = context.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.IsNullOrEmpty(text))
{
text = context.Request.UserHostAddress;
}
return text;
}
public static bool IsIPAddress(string ipAddress)
{
if (string.IsNullOrEmpty(ipAddress))
{
return false;
}
ipAddress = ipAddress.Trim();
if (ipAddress.Length < 7 || ipAddress.Length > 15)
{
return false;
}
string pattern = @"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.IsMatch(ipAddress);
}
public static bool IsInnerIP(String ipAddress)
{
bool isInnerIp = false;
long ipNum = GetIpNum(ipAddress);
/***** ***** ***** ***** ***** *****
私有IP:
A类 10.0.0.0-10.255.255.255
B类 172.16.0.0-172.31.255.255
C类 192.168.0.0-192.168.255.255
还有127.0.0.1这个环回地址
***** ***** ***** ***** ***** *****/
long aBegin = GetIpNum("10.0.0.0");
long aEnd = GetIpNum("10.255.255.255");
long bBegin = GetIpNum("172.16.0.0");
long bEnd = GetIpNum("172.31.255.255");
long cBegin = GetIpNum("192.168.0.0");
long cEnd = GetIpNum("192.168.255.255");
isInnerIp = IsInner(ipNum, aBegin, aEnd) || IsInner(ipNum, bBegin, bEnd) || IsInner(ipNum, cBegin, cEnd) || ipAddress.Equals("127.0.0.1");
return isInnerIp;
}
private static long GetIpNum(String ipAddress)
{
String[] ip = ipAddress.Split('.');
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
long c = int.Parse(ip[2]);
long d = int.Parse(ip[3]);
long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
return ipNum;
}
private static bool IsInner(long userIp, long begin, long end)
{
return (userIp >= begin) && (userIp <= end);
}
}

浙公网安备 33010602011771号