본문 바로가기

리눅스

ss 명령어

728x90
반응형

ss 명령어

ss 명령어는 socket statistics를 표시하는 도구로 리눅스에서 네트워크 연결 상태를 확인하는 데 사용됩니다. ss는 netstat의 대체 도구로 간주되며 더 빠르고 강력한 기능을 제공합니다.

1. ss 명령어 설치

일반적으로 최신 리눅스 배포판에는 ss 명령어가 기본적으로 포함되어 있습니다.

 

CentOS 7에서 설치

sudo yum install -y iproute

Ubuntu에서 설치

sudo apt install -y iproute2

2. ss 명령어 사용법 및 주요 옵션

기본 사용법

ss [옵션]

주요 옵션

  • -t : TCP 소켓을 표시합니다.
  • -u : UDP 소켓을 표시합니다.
  • -l : Listening 상태의 소켓만 표시합니다.
  • -p : 각 소켓과 연관된 프로세스를 표시합니다.
  • -a : 모든 소켓을 표시합니다 (Listening 및 Non-Listening).
  • -n : 호스트 이름을 IP 주소로 표시하며 포트 이름 대신 포트 번호를 사용합니다.
  • -r : 호스트 이름을 DNS를 통해 해결하여 표시합니다.
  • -s : 소켓 통계 요약을 표시합니다.
  • -k : 패킷 정보 확인 (/proc/net/sockstat).
  • -m : 메모리 사용량을 표시합니다.
728x90

3. 사용 예시

모든 소켓 상태 보기

  • 현재 모든 소켓을 표시하는 명령입니다.
ss -a

TCP 연결 상태 보기

  • 현재 시스템의 TCP 연결을 확인할 수 있습니다.
ss -t

UDP 연결 상태 보기

  • UDP 연결을 확인할 때 사용합니다.
ss -u

Listening 상태의 소켓 보기

  • Listening 상태인 소켓만 확인합니다.
ss -l

IP 및 포트 번호로 표시

  • DNS 이름이나 서비스 이름을 해석하지 않고 IP와 포트 번호로 표시하려면 -n 옵션을 추가합니다.
ss -tln

연결된 프로세스와 함께 소켓 정보 보기

  • 소켓과 관련된 프로세스를 확인할 수 있습니다.
    • -t : TCP
    • -u : UDP
    • -l : Listening 소켓
    • -p : 프로세스 ID 및 이름 표시
    • -n : IP 및 포트 번호 표시
ss -tulpn

소켓 통계 요약

  • 시스템의 소켓 상태에 대한 요약 정보를 확인합니다.
ss -s
Total: 212 (kernel 325)
TCP:   12 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	  325       -         -
RAW	  1         0         1
UDP	  7         4         3
TCP	  12        7         5
INET	  20        11        9
FRAG	  0         0         0

특정 포트에서 Listening 중인 소켓 확인

  • 예를 들어, 포트 53에서 Listening 중인 모든 소켓을 확인하려면
ss -ltn sport = :53
$ ss -ltn sport = :53
State      Recv-Q Send-Q      Local Address:Port                     Peer Address:Port
LISTEN     0      10         192.168.10.201:53                                  *:*
LISTEN     0      10              127.0.0.1:53                                  *:*
LISTEN     0      10                   [::]:53                               [::]:*

특정 포트 또는 상태로 소켓 필터링

특정 상태나 포트로 소켓 정보를 필터링할 수 있습니다.

 

CLOSE-WAIT 상태로 필터링

ss -tan state CLOSE-WAIT

포트 53 사용 중인 소켓 필터링

ss -tan sport = :53
$ ss -tan sport = :53
State      Recv-Q Send-Q      Local Address:Port                     Peer Address:Port
LISTEN     0      10         192.168.10.201:53                                  *:*
LISTEN     0      10              127.0.0.1:53                                  *:*
LISTEN     0      10                   [::]:53                               [::]:*

 

필요한 옵션을 조합하여 다양한 방식으로 네트워크 상태를 모니터링할 수 있습니다.

Redis 서버의 클라이언트 연결 현황 정보

ss -ntp sport = :6379 or sport = :6381 or sport = :6382 | column -t

옵션 설명

  • -n (numeric): 호스트명, 서비스명 대신 IP 주소와 포트 번호로 표시
  • -t (tcp): TCP 연결만 필터링해서 보여줌
  • -p (process): 프로세스 정보 (프로그램명, PID) 포함

필터 조건

  • sport = :6379 : 소스 포트가 6379인 연결
  • sport = :6381 : 소스 포트가 6381인 연결
  • sport = :6382 : 소스 포트가 6382인 연결
  • or : 위 조건들 중 하나라도 만족하는 연결 표시

파이프(|)

  • | column -t : 출력 결과를 정렬된 테이블 형태로 보기 좋게 정리
State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port    Process
ESTAB   0       0       192.168.0.111:6379  192.168.0.100:54321 users:(("redis-server",pid=1234,fd=6))
ESTAB   0       0       192.168.0.111:6381  192.168.0.101:12345 users:(("redis-server",pid=1235,fd=8))
ESTAB   0       0       192.168.0.111:6382  192.168.0.102:23456 users:(("redis-server",pid=1236,fd=7))

컬럼 의미

  • State : 연결 상태 (ESTAB=ESTABLISHED=연결됨)
  • Recv-Q : 수신 대기 중인 데이터량
  • Send-Q : 송신 대기 중인 데이터량
  • Local Address :Port: 서버의 IP와 포트 (Redis 서버)
  • Peer Address :Port: 클라이언트의 IP와 포트
  • Process : Redis 서버 프로세스 정보

클라이언트 IP 주소

ss -ntp sport = :6379 or sport = :6381 or sport = :6382 | awk '/ESTAB/ {split($5, a, ":"); print a[1]}' | sort -u
192.168.0.100
192.168.0.101
192.168.0.102
192.168.0.103

클라이언트 IP와 연결 수 함께 보기

ss -ntp sport = :6379 or sport = :6381 or sport = :6382 | awk '/ESTAB/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
    158 192.168.0.100
    128 192.168.0.102
    120 192.168.0.101
    120 192.168.0.103

 

반응형