using System.Net.NetworkInformation; namespace InnovEnergy.Lib.Utils.Net; public static class NetUtils { public static Int32 GetAvailableTcpPort() { const Int32 minPort = 1024; var ipProps = IPGlobalProperties.GetIPGlobalProperties(); var tcpConnections = ipProps .GetActiveTcpConnections() .Select(c => c.LocalEndPoint.Port) .Where(p => p >= minPort); var tcpListeners = ipProps .GetActiveTcpListeners() .Select(c => c.Port) .Where(p => p >= minPort); var usedPorts = tcpConnections .Concat(tcpListeners) .ToHashSet(); return Enumerable .Range(minPort, UInt16.MaxValue - minPort) .Unless(usedPorts.Contains) .First(); } }