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)
ss
는 socket statistics 의 약자로, 리눅스 시스템의 소켓 정보를 확인하는 데 사용되는 강력한 도구이다.
netstat
을 대체하기 위해 개발되었으며, 특히 많은 연결이 있는 시스템에서 netstat
보다 훨씬 빠른 성능을 보여준다.
ss
는 iproute2
패키지에 포함되어 있으며, 최신 리눅스 배포판의 표준 네트워크 유틸리티 중 하나이다.
주요 기능은 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 | # 상세 정보 확인