using System.Net.NetworkInformation; using System.Text; using JNPF.DependencyInjection; using JNPF.JsonSerialization; using JNPF.RemoteRequest.Extensions; using Microsoft.AspNetCore.Http; namespace JNPF.Common.Security; /// /// 网络操作 /// 版 本:V3.0.0 /// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com) /// 作 者:JNPF开发平台组. /// [SuppressSniffer] public static class NetHelper { #region Ip(获取Ip) /// /// 获取Ip. /// public static string Ip { get { string result = string.Empty; if (App.HttpContext != null) result = GetWebClientIp(); return result.Equals("::1") ? "127.0.0.1" : result; } } /// /// 请求Url. /// public static string Url { get { return new StringBuilder().Append(App.HttpContext?.Request?.Scheme).Append("://") .Append(App.HttpContext?.Request?.Host).Append(App.HttpContext?.Request?.PathBase) .Append(App.HttpContext?.Request?.Path).Append(App.HttpContext?.Request?.QueryString).ToString(); } } /// /// 得到客户端IP地址. /// /// private static string GetWebClientIp() { HttpContext httpContext = App.HttpContext; string ip = httpContext?.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (string.IsNullOrEmpty(ip)) { ip = App.HttpContext.Connection.RemoteIpAddress.ToString(); } return ip; } #endregion #region 获取mac地址 /// /// 返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器). /// /// public static NetworkInterface[] NetCardInfo() { return NetworkInterface.GetAllNetworkInterfaces(); } /// /// 通过NetworkInterface读取网卡Mac. /// /// public static List GetMacByNetworkInterface() { List macs = new List(); NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface ni in interfaces) { macs.Add(ni.GetPhysicalAddress().ToString()); } return macs; } #endregion #region Ip城市(获取Ip城市) /// /// 获取IP地址信息. /// /// /// public static async Task GetLocation(string ip) { string res = string.Empty; try { string url = string.Format("https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={0}&resource_id=6006&ie=utf8&oe=gbk&format=json", ip); string result = await url.GetAsStringAsync(); dataone? resJson = result.ToObject().data.FirstOrDefault(); string data = resJson?.location; res = data != null ? data.Split(' ')[0] : "本地局域网"; } catch { res = string.Empty; } return res; } /// /// 百度接口. /// public class obj { public List? data { get; set; } } public class dataone { public string? location { get; set; } } #endregion }