Skip to content

Instantly share code, notes, and snippets.

@jrusbatch
Created December 5, 2012 02:17
Show Gist options
  • Select an option

  • Save jrusbatch/4211535 to your computer and use it in GitHub Desktop.

Select an option

Save jrusbatch/4211535 to your computer and use it in GitHub Desktop.

Revisions

  1. jrusbatch created this gist Dec 5, 2012.
    57 changes: 57 additions & 0 deletions AvailablePorts.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@
    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;
    }
    }
    }