static Regex validipregex = new Regex(@"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})+", RegexOptions.Compiled);
public static string GetClientBrowserInfo()
{
string info = "";
if (HttpContext.Current != null)
{
NameValueCollection headers = HttpContext.Current.Request.Headers;
if (headers != null && headers.Count > 0)
{
info = "BROWSER[";
foreach (string header in headers)
{
foreach (string headervalue in headers.GetValues(header))
{
info += string.Format("{0}:{1};", header, headervalue);
}
}
info += "]";
}
}
return info;
}
public static IEnumerable<string> GetClientIPs2()
{
string strContent = GetClientBrowserInfo();
List<string> ips = new List<string>(10);
if (!string.IsNullOrEmpty(strContent))
{
MatchCollection mc = validipregex.Matches(strContent);
IPAddress addr;
for (int j = 0; j < mc.Count; j++)
{
string ipAddr = mc[j].Value;
if (IPAddress.TryParse(ipAddr, out addr) && addr.AddressFamily == AddressFamily.InterNetwork)
{
ips.Add(ipAddr);
}
}
}
return ips.Distinct().ToList();
}
public static string GetClientIP2()
{
var svs = HttpContext.Current?.Request?.ServerVariables;
string ip = string.Empty;
if (svs == null)
{
return ip;
}
if ((ip = svs.Get("HTTP_X_FORWARDED_FOR").GetValidIp()) != null)
{
return ip;
}
if ((ip = svs.Get("HTTP_X_REAL_IP").GetValidIp()) != null)
{
return ip;
}
if ((ip = svs.Get("REMOTE_ADDR").GetValidIp()) != null)
{
return ip;
}
if ((ip = HttpContext.Current?.Request?.UserHostAddress.GetValidIp()) != null) {
return ip;
}
return string.Empty;
}
private static string GetValidIp(this string ips)
{
if (string.IsNullOrWhiteSpace(ips))
{
return null;
}
var group = ips.Split(',').Select(ip => ip.Trim());
IPAddress ipAddr;
foreach (string ip in group)
{
if (IPAddress.TryParse(ip, out ipAddr) )
{
if (ip.Contains(":"))
{
ipAddr = ipAddr.MapToIPv4();
}
if (ipAddr.AddressFamily == AddressFamily.InterNetwork) {
return ipAddr.ToString();
}
}
}
return null;
}