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
}