using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; namespace FastGithub.Configuration { /// /// 提供本机设备信息 /// public static class LocalMachine { /// /// 获取设备名 /// public static string Name => Environment.MachineName; /// /// 获取设备所有IP /// /// public static IEnumerable GetAllIPAddresses() { yield return IPAddress.Loopback; yield return IPAddress.IPv6Loopback; foreach (var @interface in NetworkInterface.GetAllNetworkInterfaces()) { foreach (var addressInfo in @interface.GetIPProperties().UnicastAddresses) { yield return addressInfo.Address; } } } /// /// 获取设备所有IPv4 /// /// public static IEnumerable GetAllIPv4Addresses() { foreach (var address in GetAllIPAddresses()) { if (address.AddressFamily == AddressFamily.InterNetwork) { yield return address; } } } /// /// 返回设备是否包含指定IP /// /// /// public static bool ContainsIPAddress(IPAddress address) { return GetAllIPAddresses().Contains(address); } /// /// 获取对应的本机地址 /// /// 远程地址 /// public static IPAddress? GetLocalAddress(EndPoint remoteEndPoint) { try { using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Connect(remoteEndPoint); return socket.LocalEndPoint is IPEndPoint localEndPoint ? localEndPoint.Address : default; } catch (Exception) { return default; } } } }