using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; namespace Common { public sealed class NetHelper { #region Ip(获取Ip) /// /// 获取Ip /// public static string Ip { get { var result = string.Empty; if (HttpContext.Current != null) result = GetWebClientIp(); if (!string.IsNullOrEmpty(result)) result = GetLanIp(); return result; } } /// /// 获取Web客户端的Ip /// private static string GetWebClientIp() { var ip = GetWebRemoteIp(); foreach (var hostAddress in Dns.GetHostAddresses(ip)) { if (hostAddress.AddressFamily == AddressFamily.InterNetwork) { return hostAddress.ToString(); } else { return ip == "::1" ? "127.0.0.0" : ip; } } return string.Empty; } /// /// 获取Web远程Ip /// public static string GetWebRemoteIp() { return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } /// /// 获取局域网IP /// private static string GetLanIp() { foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName())) { if (hostAddress.AddressFamily == AddressFamily.InterNetwork) return hostAddress.ToString(); } return string.Empty; } #endregion Ip(获取Ip) #region Host(获取主机名) /// /// 获取主机名 /// public static string Host { get { return HttpContext.Current == null ? Dns.GetHostName() : GetWebClientHostName(); } } /// /// 获取Web客户端主机名 /// private static string GetWebClientHostName() { if (!HttpContext.Current.Request.IsLocal) return string.Empty; var ip = GetWebRemoteIp(); var result = Dns.GetHostEntry(IPAddress.Parse(ip)).HostName; if (result == "localhost.localdomain") result = Dns.GetHostName(); return result; } #endregion Host(获取主机名) #region Browser(获取浏览器信息) /// /// 获取浏览器信息 /// public static string Browser { get { if (HttpContext.Current == null) return string.Empty; var browser = HttpContext.Current.Request.Browser; return string.Format("{0} {1}", browser.Browser, browser.Version); } } #endregion Browser(获取浏览器信息) #region 通过IP得到IP所在地省市 /// /// 将Unicode编码转换成中文 /// /// /// private static string ConvertUnicode2Chinese(string result) { Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); return reg.Replace(result, delegate (Match m) { return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); }); } private static bool HasContains(Predicate handler, string str) { return handler.Invoke(str); } #endregion 通过IP得到IP所在地省市 #region 其他 /// /// IP地址信息 /// private class IPAddressItem { public int ret { get; set; } public string start { get; set; } public string end { get; set; } public string country { get; set; } public string province { get; set; } public string city { get; set; } public string district { get; set; } public string isp { get; set; } public string type { get; set; } public string desc { get; set; } } #endregion 其他 } }