Profile picture

[Linux] 네트워크 소켓 정보는 어떤 명령어로 확인할까? - netstat / ss

JaehyoJJAng2024년 04월 15일

netstat

netstat 명령어는 리눅스 시스템의 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 등 다양한 네트워크 정보를 확인하는데 사용되는 도구이다.

최근에는 ss 명령어가 netstat 명령어를 대체하고 있다.


netstat의 주요 기능은 다음과 같다.

  • 네트워크 연결 상태 확인: 현재 시스템에 연결된 모든 TCP, UDP, UNIX 소켓 등의 연결 상태를 보여준다.
    • 예: ESTABLISHED, LISTEN, TIME_WAIT 등)
  • 포트 정보 확인: 어떤 포트가 열려 있고, 어떤 프로세스가 해당 포트를 사용하고 있는지 확인할 수 있다.
  • 라우팅 테이블 확인: 시스템의 IP 라우팅 테이블 정보를 보여준다.
  • 네트워크 인터페이스 통계 확인: 각 네트워크 인터페이스(예: eth0, lo)의 송수신 패킷 수, 오류, 드롭 등의 통계 정보를 보여준다.
  • 프로토콜 통계 확인: TCP, UDP, ICMP 등 각 프로토콜별 통계 정보를 확인할 수 있다.

옵션

|옵션||설명| |---------|-----------| |-t|TCP 프로토콜만 표시합니다.| |-u|UDP 프로토콜만 표시합니다.| |-x|UNIX 도메인 소켓만 표시합니다.| |-l|연결 대기(LISTEN) 상태의 소켓만 표시합니다.| |-p|각 소켓을 사용하고 있는 프로세스의 ID(PID)와 프로그램 이름을 함께 표시합니다. (루트 권한 필요)| |-n|호스트명, 포트명, 사용자명 등을 이름 대신 숫자로 표시합니다. (조회 속도 향상)| |-a|모든 상태의 소켓(연결 대기, 연결된 상태 등)을 표시합니다.| |-r|커널 라우팅 테이블 정보를 표시합니다. route -e와 유사합니다.| |-i|네트워크 인터페이스 테이블 정보를 표시합니다. ifconfig -a와 유사합니다.| |-s|각 프로토콜별(TCP, UDP, ICMP, IP 등) 통계 정보를 표시합니다.| |-c|지정한 간격으로 계속해서 정보를 갱신하며 표시합니다.| |-e|확장된 정보를 표시합니다. (예: 사용자명, inode 등)| |-W|넓은 형식으로 표시합니다. (호스트명이 길 경우 잘리지 않도록)| |-N|네트워크 주소의 이름을 가능한 짧게 표시합니다.|

실무에서 자주 쓰는 netstat 옵션 조합

1. 모든 리스닝(LISTEN) 상태의 TCP/UDP 포트와 해당 프로세스 확인

netstat -tulnp

서버에서 어떤 서비스가 실행 중이고 어떤 포트를 사용하고 있는지 확인할 때 매우 유용하다. 방화벽 설정 시 오픈해야 할 포트를 파악하는 데도 도움이 된다.


2. 모든 TCP 연결 상태 확인하기 (PID 포함)

netstat -antp

현재 시스템에 연결된 모든 TCP 연결(ESTABLISHED, TIME_WAIT 등)과 해당 연결을 사용하는 프로세스를 확인할 때 사용한다.

특정 IP와의 연결 상태를 파악하거나, 비정상적인 연결을 확인할 때 사용해보자.

만약, 모든 UDP 연결 상태를 확인하고 싶다면 위 명령어에서 t 옵션을 u로 변경해주면 된다.


ss (socket statistics)

sssocket statistics 의 약자로, 리눅스 시스템의 소켓 정보를 확인하는 데 사용되는 강력한 도구이다.

netstat을 대체하기 위해 개발되었으며, 특히 많은 연결이 있는 시스템에서 netstat보다 훨씬 빠른 성능을 보여준다.

ssiproute2 패키지에 포함되어 있으며, 최신 리눅스 배포판의 표준 네트워크 유틸리티 중 하나이다.


주요 기능은 netstat과 유사하지만, 더 상세한 정보와 효율적인 필터링 기능을 제공한다.

  • 네트워크 연결 및 소켓 상태 확인: TCP, UDP, DCCP, RAW, UNIX 도메인 소켓 등 다양한 종류의 소켓 정보를 표시함.
  • 포트 정보 및 관련 프로세스 확인: 어떤 포트가 사용 중이고, 어떤 프로세스가 해당 포트를 점유하고 있는지 확인할 수 있음.
  • 필터링 기능: 상태(state), 주소(address), 포트(port) 등 다양한 조건으로 소켓 정보를 필터링할 수 있어 원하는 정보만 효율적으로 볼 수 있음.
  • TCP 내부 정보 표시: TCP 연결에 대한 상세한 내부 정보(예: 타이머, 혼잡 제어 윈도우 크기 등)를 확인할 수 있음.
  • 성능: /proc 파일 시스템을 직접 파싱하는 netstat과 달리 커널의 netlink 소켓 인터페이스를 사용하여 정보를 가져오므로 매우 빠름.

주요 옵션

옵션 설명
-t TCP 소켓만 표시합니다.
-u UDP 소켓만 표시합니다.
-x UNIX 도메인 소켓만 표시합니다.
-w RAW 소켓만 표시합니다.
-n 호스트명, 포트명 등을 이름 대신 숫자로 표시합니다. (조회 속도 향상)
-l 연결 대기(LISTEN) 상태의 소켓만 표시합니다.
-p 각 소켓을 사용하고 있는 프로세스의 ID(PID)와 프로그램 이름을 함께 표시합니다. (루트 권한 필요)
-a 모든 상태의 소켓(연결 대기, 연결된 상태 등)을 표시합니다.
-o 타이머 정보(TCP 연결의 keepalive 타이머 등)를 표시합니다.
-e 확장된 소켓 정보(사용자, inode, SELinux 보안 컨텍스트 등)를 표시합니다.
-m 소켓 메모리 사용량 정보를 표시합니다.
-i TCP 연결의 내부 정보(혼잡 윈도우, RTT 등)를 표시합니다.
-s 요약 통계 정보(총 소켓 수, 프로토콜별 소켓 수 등)를 표시합니다.
-4 IPv4 소켓만 표시합니다.
-6 IPv6 소켓만 표시합니다.
-0 PACKET 소켓만 표시합니다.
-f FAMILY 지정된 주소 패밀리의 소켓만 표시합니다. (예: inet, inet6, unix, netlink)
-r 숫자 주소/포트를 이름으로 변환하여 표시하려고 시도합니다. (주로 필터링 시 이름 사용 목적)
state STATE 특정 상태의 소켓만 필터링합니다. (예: established, listen, time-wait)
dport PORT 목적지 포트(destination port)로 필터링합니다. (예: dport = :80 또는 dport = :http)
sport PORT 소스 포트(source port)로 필터링합니다. (예: sport = :22 또는 sport = :ssh)
dst ADDR 목적지 주소(destination address)로 필터링합니다.
src ADDR 소스 주소(source address)로 필터링합니다.

실무에서 자주 쓰는 ss 옵션 조합

1. 모든 리스닝(LISTEN) 상태의 TCP/UDP 포트와 해당 프로세스 확인

ss -tulnp

netstat -tulnp와 거의 동일하며, 서버에서 실행 중인 서비스와 사용 포트를 빠르게 확인할 때 사용된다.


2. 모든 TCP 연결 상태 확인 (PID 포함)

ss -antp

netstat -antp와 유사하며, 현재 시스템의 모든 TCP 연결(ESTABLISHED, TIME_WAIT 등)과 관련 프로세스를 확인한다.



3. 특정 포트(예: 80포트)를 사용하는 연결 확인

ss -antp 'sport = :80 or dport = :80'

또는 리스닝 상태만 보려면

ss -lntp 'sport = :80 or dport = :80'

소스 포트 또는 목적지 포트가 80인 연결을 필터링한다. (작은따옴표는 쉘의 특수 문자 해석을 방지하기 위함.)


4. 특정 IP 주소와의 연결 확인

ss -antp dst <IP_ADDRESS>
ss -antp src <IP_ADDRESS>

특정 원격 호스트와의 모든 TCP 연결을 확인할 때 유용함.


5. ESTABLISHED 상태의 HTTP/HTTPS 연결만 확인하기

ss -o state established '( dport = :http or sport = :http or dport = :https or sport = :https )'
  • -o: 타이머 정보 표시
  • state established: ESTABLISHED 상태의 소켓만 필터링
  • '( dport = :http or sport = :http or dport = :https or sport = :https )': HTTP(80) 또는 HTTPS(443) 포트 관련 연결

<br.

6. TIME_WAIT 상태의 연결 개수 및 정보 확인

ss -ant state time-wait | wc -l # 개수만 확인
ss -antp state time-wait |      # 상세 정보 확인

Loading script...