본문 바로가기
Linux/Linux Shell Command

netstat - TCP 포트(port) 조회

by 드로니뚜벅이 2023. 1. 17.

웹서버를 생성하고 웹 서비스를 하려고 할 경우 현재 시스템의 네트워크 포트 상태를 확인할 필요가 있습니다.

netstat(network statistics) 명령어는 현재 사용하고 있는 TCP 포트를 조회하는 명령어로 TCP 통신을 진행중인 서비스의 연결 상태를 확인할 수 있습니다. 이 명령어는 주로 네트워크의 문제를 찾아내고 성능 측정을 통해 네트워크 트래픽을 결정하기 위해 사용합니다.

 

Options:

Option Description
a 모든 소켓을 출력합니다.
-l listen 상태인 소켓만 출력합니다.
-n 서비스 이름 확인은 생략하고 호스트 이름과 포트를 숫자 형식으로 표시합니다.
-p 포트에서 수신하는 PID 와 프로세스 명을 출력합니다.
-t TCP 소켓만 출력합니다.
-u UDP 소켓만 출력합니다.

사용 예:

$ netstat -nlt | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN 

$ sudo netstat -ltup    
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost.localdoma:ipp 0.0.0.0:*               LISTEN      129968/cupsd        
tcp        0      0 localhost.lo:postgresql 0.0.0.0:*               LISTEN      1362/postgres       
tcp        0      0 localhost.localdom:5433 0.0.0.0:*               LISTEN      1361/postgres       
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      1607/mosquitto      
tcp        0      0 localhost.localdo:34665 0.0.0.0:*               LISTEN      54076/code          
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN      919/systemd-resolve 
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      129968/cupsd        
tcp6       0      0 [::]:1883               [::]:*                  LISTEN      1607/mosquitto      
tcp6       0      0 [::]:ms-wbt-server      [::]:*                  LISTEN      1324/xrdp           
tcp6       0      0 [::]:33060              [::]:*                  LISTEN      103371/mysqld       
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      103371/mysqld       
tcp6       0      0 [::]:http               [::]:*                  LISTEN      1363/apache2        
tcp6       0      0 ip6-localhost:3350      [::]:*                  LISTEN      1261/xrdp-sesman    
udp        0      0 0.0.0.0:42745           0.0.0.0:*                           1052/avahi-daemon:  
udp        0      0 localhost:domain        0.0.0.0:*                           919/systemd-resolve 
udp        0      0 0.0.0.0:631             0.0.0.0:*                           129970/cups-browsed 
udp        0      0 224.0.0.251:mdns        0.0.0.0:*                           5859/chrome         
udp        0      0 0.0.0.0:mdns            0.0.0.0:*                           1052/avahi-daemon:  
udp6       0      0 [::]:36940              [::]:*                              1052/avahi-daemon:  
udp6       0      0 [::]:mdns               [::]:*                              1052/avahi-daemon:

두번째 사용 예에서 출력 정보는 다음과 같습니다.

Proto 프로토콜의 종류, TCP 혹은 UDP
Local Address 자기 자신의 IP 주소와 포트 번호
0.0.0.0은 특정 IP와 연결되어 있지 않다는 뜻입니다.
Foreign Address 상대방 측의 IP 주소와 포트 번호
0.0.0.0은 아직 통신이 시작되지 않았다는 뜻입니다.
State 현재 서비스의 연결 상태입니다.
PID/Program name 현재 포트를 사용하고 프로세스 정보입니다.

출력 정보 중에서 State 는 다음과 같은 의미를 가집니다.

State Description
ESTABLISHED 연결 성립 상태
SYN_SENT 서버에서 클라이언트로 연결 요청을 시도한 후 기다리는 상태
SYN_RECV 클라이언트에서 연결 요청을 받은 상태
FIN_WAIT1 소켓이 닫히고, 연결은 차단되고 있는 상태
FIN_WAIT2 연결이 끊기고 소켓은 클라이언트에서 차단되는 걸 기다리는 상태
TIME_WAIT 네트워크가 패킷을 처리하기 위해 소켓이 닫힌 후에도 대기중인 상태
CLOSE 소켓이 사용되지 않은 상태
CLOSE_WAIT 클라이언트에서 종료되고 소켓이 닫힐 때까지 대기하는 상태
LAST_ACK 클라이언트가 종료되고 소켓도 닫힌 후 확인을 기다리는 상태
LISTEN 소켓에 들어오는 연결 요청을 대기 중인 상태
CLOSING 클라이언트에서 연결 종료 요청 확인을 기다리는 상태
UNKNOWN 상태 확인 불가