using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; namespace AlicizaX.Runtime { public static partial class Utility { /// /// 网络相关的对象工具类 /// public static class Net { /// /// 获取第一个可用的端口号 /// /// 起始端口号 /// 结束端口号 /// public static int GetFirstAvailablePort(int startPort = 667, int maxPort = 65535) { for (int i = startPort; i < maxPort; i++) { if (PortIsAvailable(i)) return i; } return -1; } /// /// 获取操作系统已用的端口号 /// /// public static List PortIsUsed() { //获取本地计算机的网络连接和通信统计数据的信息 var ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); //返回本地计算机上的所有Tcp监听程序 var ipsTcp = ipGlobalProperties.GetActiveTcpListeners(); //返回本地计算机上的所有UDP监听程序 var ipsUDP = ipGlobalProperties.GetActiveUdpListeners(); //返回本地计算机上的Internet协议版本4(IPV4 传输控制协议(TCP)连接的信息。 var tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections(); var allPorts = new List(); foreach (var ep in ipsTcp) { allPorts.Add(ep.Port); } foreach (var ep in ipsUDP) { allPorts.Add(ep.Port); } foreach (var conn in tcpConnInfoArray) { allPorts.Add(conn.LocalEndPoint.Port); } return allPorts; } /// /// 检查指定端口是否已用 /// /// /// public static bool PortIsAvailable(int port) { var isAvailable = true; var portUsed = PortIsUsed(); foreach (int p in portUsed) { if (p == port) { isAvailable = false; break; } } return isAvailable; } /// /// 获取本机ip地址 /// /// public static string GetIP() { var hostName = Dns.GetHostName(); var iPHostEntry = Dns.GetHostEntry(hostName); foreach (var address in iPHostEntry.AddressList) { if (address.AddressFamily == AddressFamily.InterNetwork) { return address.ToString(); } } return string.Empty; } public static (AddressFamily, string) GetIPv6Address(string host) { var addresses = Dns.GetHostAddresses(host); foreach (var ipAddress in addresses) { if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) { return (AddressFamily.InterNetworkV6, ipAddress.ToString()); } } foreach (var ipAddress in addresses) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) { return (AddressFamily.InterNetwork, ipAddress.ToString()); } } return (AddressFamily.InterNetwork, host); } } } }