Skip to content

Instantly share code, notes, and snippets.

@teddykishi
Forked from jrusbatch/AvailablePorts.cs
Created January 21, 2021 21:39
Show Gist options
  • Save teddykishi/9ad67fef8a52f9745028f885e8876bce to your computer and use it in GitHub Desktop.
Save teddykishi/9ad67fef8a52f9745028f885e8876bce to your computer and use it in GitHub Desktop.
Find an Available Port with C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Net;
namespace AvailablePort
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetAvailablePort(1000).ToString());
Console.ReadLine();
}
/// <summary>
/// checks for used ports and retrieves the first free port
/// </summary>
/// <returns>the free port or 0 if it did not find a free port</returns>
public static int GetAvailablePort(int startingPort)
{
IPEndPoint[] endPoints;
List<int> portArray = new List<int>();
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
//getting active connections
TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
portArray.AddRange(from n in connections
where n.LocalEndPoint.Port >= startingPort
select n.LocalEndPoint.Port);
//getting active tcp listners - WCF service listening in tcp
endPoints = properties.GetActiveTcpListeners();
portArray.AddRange(from n in endPoints
where n.Port >= startingPort
select n.Port);
//getting active udp listeners
endPoints = properties.GetActiveUdpListeners();
portArray.AddRange(from n in endPoints
where n.Port >= startingPort
select n.Port);
portArray.Sort();
for (int i = startingPort; i < UInt16.MaxValue; i++)
if (!portArray.Contains(i))
return i;
return 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment