C#

TCP 포트 사용 중인지 체크

TCP 포트가 사용 중인지 체크하기

TCP/IP 포트가 사용 중인지 체크하기 위해서는 System.Net.NetworkInformation 네임스페이스에 있는 IPGlobalProperties 클래스를 사용한다. IPGlobalProperties 클래스는 로컬 컴퓨터의 네트워크 연결과 관련된 다양한 정보를 제공해 주는 클래스이다.

IPGlobalProperties 클래스의 여러 멤버 중 TCP 포트가 사용 중인지 체크하기 위해 사용하는 메서드는 다음 두가지이다.

  • GetActiveTcpConnections() : 이 메서드는 Listening 상태를 제외한 모든 TCP Connection들을 리턴한다. 즉, 포트가 사용되고 있거나 대기 중이거나 또는 닫히고 있거나 닫힌 상태의 모든 TCP 연결 정보들을 리턴한다.
  • GetActiveTcpListeners() : 이 메서드는 Listening 상태에 있는 TCP Listener들을 리턴한다. 즉, Port를 오픈하고 클라이언트를 Listening 하고 있는 TCP 서버들의 네트워크 연결 정보를 리턴한다.
위의 2가지 메서드를 사용하여 로컬 컴퓨터 내에서 어떤 포트가 사용 중인지 체크하는 코드를 아래 예제와 같이 작성할 수 있다.
public static bool IsTcpPortAvailable(int tcpPort)
{
    var ipgp = IPGlobalProperties.GetIPGlobalProperties();

    // Check ActiveConnection ports
    TcpConnectionInformation[] conns = ipgp.GetActiveTcpConnections();
    foreach (var cn in conns)
    {
        if (cn.LocalEndPoint.Port == tcpPort)
        {
            return false;
        }
    }

    // Check LISTENING ports
    IPEndPoint[] endpoints = ipgp.GetActiveTcpListeners();
    foreach (var ep in endpoints)
    {
        if (ep.Port == tcpPort)
        {
            return false;
        }
    }

    return true;
}

netstat 유틸러티

대표적인 네트워크 유틸러티인 netstat를 사용하여 어떤 포트가 사용 중인지를 쉽게 체크할 수 있다. 아래는 윈도우즈에서 netstat을 사용하여 1433 포트가 사용 중인지 체크하고, 어떤 프로그램이 그 포트를 사용하고 있는지 체크해 본 예이다. 여기서 3116 은 그 포트를 사용하는 프로세스 ID (PID)이고, 이를 tasklist 라는 유틸러티로 찾아본 결과 sqlservr.exe 가 그 포트를 사용하고 있음을 표시하고 있다.

C> netstat -ano | find "1433"
TCP  0.0.0.0:1433  0.0.0.0:0  LISTENING  3116

C> tasklist /FI "PID eq 3116"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
sqlservr.exe                  3116 Services                   0     12,232 K
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

Previous Next Print