Files
qhmes/yy-admin-master/YY.Admin.Core/Util/DeviceInfoUtil.cs

151 lines
5.0 KiB
C#
Raw Normal View History

using System.Diagnostics;
using System.Management;
using System.Net;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace YY.Admin.Core.Util
{
public static class DeviceInfoUtil
{
private static readonly ILoggerService _logger = ContainerLocator.Container.Resolve<ILoggerService>();
private static readonly HttpClient _httpClient = ContainerLocator.Container.Resolve<HttpClient>();
public static async Task<string> GetPublicIpAddressAsync()
{
try
{
using var ipinfoCts = new CancellationTokenSource(TimeSpan.FromSeconds(3));
var response = await _httpClient.GetStringAsync("https://ipinfo.io/ip", ipinfoCts.Token);
return response.Trim();
}
catch (Exception ex)
{
_logger.Error($"获取登录IP地址失败:{ex.Message}");
// 备用方案
try
{
using var ipifyCts = new CancellationTokenSource(TimeSpan.FromSeconds(3));
var response = await _httpClient.GetStringAsync("https://api.ipify.org", ipifyCts.Token);
return response.Trim();
}
catch (Exception ex2)
{
_logger.Error($"获取登录IP地址失败2:{ex2.Message}");
return "无法获取公网IP";
}
}
}
public static IEnumerable<string> GetLocalIpAddresses()
{
try
{
var host = Dns.GetHostEntry(Dns.GetHostName());
return host.AddressList
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
.Select(ip => ip.ToString())
.ToList();
}
catch
{
return new List<string> { "无法获取本地IP" };
}
}
public static string GetMachineName()
{
return Environment.MachineName;
}
public static string GetOsVersion()
{
return $"{Environment.OSVersion} ({(Environment.Is64BitOperatingSystem ? "64" : "32")})";
}
public static string GetMacAddress()
{
try
{
var networkInterface = NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(nic => nic.OperationalStatus == OperationalStatus.Up &&
nic.NetworkInterfaceType != NetworkInterfaceType.Loopback);
return networkInterface?.GetPhysicalAddress().ToString() ?? "无法获取MAC地址";
}
catch
{
return "无法获取MAC地址";
}
}
public static string GetProcessorInfo()
{
try
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"))
using (var collection = searcher.Get())
{
foreach (var item in collection)
{
return $"{item["Name"]} ({item["NumberOfCores"]}核)";
}
}
}
return Environment.ProcessorCount + " 核处理器";
}
catch
{
return Environment.ProcessorCount + " 核处理器";
}
}
public static long GetTotalMemory()
{
try
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"))
using (var collection = searcher.Get())
{
foreach (var item in collection)
{
var totalMemory = Convert.ToInt64(item["TotalPhysicalMemory"]);
return totalMemory / (1024 * 1024); // 转换为MB
}
}
}
return 0;
}
catch
{
return 0;
}
}
public static string GetSystemUpTime()
{
try
{
using (var uptime = new PerformanceCounter("System", "System Up Time"))
{
uptime.NextValue();
var seconds = (int)uptime.NextValue();
var ts = TimeSpan.FromSeconds(seconds);
return $"{ts.Days}天 {ts.Hours}小时 {ts.Minutes}分钟";
}
}
catch
{
return "无法获取运行时间";
}
}
}
}