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 其他
}
}