C#获取客户端Ip工具类
Posted hofmann
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#获取客户端Ip工具类相关的知识,希望对你有一定的参考价值。
string pcname = Dns.GetHostName(); string ip = Dns.GetHostAddresses(pcname).First().ToString();
using Com.AppCode.Extend; using Com.AppCode.Helper; using System.Collections.Generic; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Web; namespace Com.AppCode.Net { /// <summary> /// 网络操作 /// </summary> public class NetHelper { #region Ip(获取Ip) /// <summary> /// 获取Ip /// </summary> public static string Ip { get { var result = string.Empty; if (HttpContext.Current != null) result = GetWebClientIp(); if (result.IsEmpty()) result = GetLanIp(); return result; } } /// <summary> /// 获取Web客户端的Ip /// </summary> private static string GetWebClientIp() { var ip = GetWebRemoteIp(); foreach (var hostAddress in Dns.GetHostAddresses(ip)) { if (hostAddress.AddressFamily == AddressFamily.InterNetwork) return hostAddress.ToString(); } return string.Empty; } /// <summary> /// 获取Web远程Ip /// </summary> private static string GetWebRemoteIp() { return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } /// <summary> /// 获取局域网IP /// </summary> private static string GetLanIp() { foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName())) { if (hostAddress.AddressFamily == AddressFamily.InterNetwork) return hostAddress.ToString(); } return string.Empty; } #endregion #region Host(获取主机名) /// <summary> /// 获取主机名 /// </summary> public static string Host { get { return HttpContext.Current == null ? Dns.GetHostName() : GetWebClientHostName(); } } /// <summary> /// 获取Web客户端主机名 /// </summary> 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 #region 获取mac地址 /// <summary> /// 返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器)。 /// </summary> /// <returns></returns> public static NetworkInterface[] NetCardInfo() { return NetworkInterface.GetAllNetworkInterfaces(); } ///<summary> /// 通过NetworkInterface读取网卡Mac ///</summary> ///<returns></returns> public static List<string> GetMacByNetworkInterface() { List<string> macs = new List<string>(); NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface ni in interfaces) { macs.Add(ni.GetPhysicalAddress().ToString()); } return macs; } #endregion #region Ip城市(获取Ip城市) /// <summary> /// 获取IP地址信息 /// </summary> /// <param name="ip"></param> /// <returns></returns> public static string GetLocation(string ip) { string res = ""; try { string apiUrl = "http://apis.juhe.cn/ip/ip2addr?ip=" + ip + "&dtype=json&key=b39857e36bee7a305d55cdb113a9d725"; res = HttpHelper.GetHttpWebResponseReturnString(apiUrl, null).ToString(); var resjson = JsonHelper.ScriptDeserialize<objex>(res); res = resjson.result.area + " " + resjson.result.location; } catch { res = ""; } if (!string.IsNullOrEmpty(res)) { return res; } try { string url = "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=" + ip + "&resource_id=6006&ie=utf8&oe=gbk&format=json"; res = HttpHelper.GetHttpWebResponseReturnString(url, null).ToString(); var resjson = JsonHelper.ScriptDeserialize<obj>(res); res = resjson.data[0].location; } catch { res = ""; } return res; } /// <summary> /// 百度接口 /// </summary> public class obj { public List<dataone> data { get; set; } } public class dataone { public string location { get; set; } } /// <summary> /// 聚合数据 /// </summary> public class objex { public string resultcode { get; set; } public dataoneex result { get; set; } public string reason { get; set; } public string error_code { get; set; } } public class dataoneex { public string area { get; set; } public string location { get; set; } } #endregion #region Browser(获取浏览器信息) /// <summary> /// 获取浏览器信息 /// </summary> 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 } }
以上是关于C#获取客户端Ip工具类的主要内容,如果未能解决你的问题,请参考以下文章