본문 바로가기

C#

[C#] TCP 포트 사용중인지 체크

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

TCP/IP 포트가 사용 중인지 체크하기 위해서는 System.Net.NetworkInfomation 네임스페이스에 있는 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 false;
}

 

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

 

 

출처) 예제로 배우는 C# 프로그래밍

'C#' 카테고리의 다른 글

[C#] Socket 클라이언트  (0) 2024.06.24
[C#] 네트워크 프로그래밍  (0) 2024.06.24
[C#] 비동기 TCP 서버  (0) 2024.06.24
[C#] TCP 화면 전송 예제  (0) 2024.06.24
[C#] TCP 클라이언트 클래스와 사용법  (0) 2024.06.24