linux socket 상태를 조회하는 ss(socket statistics) 명령어 사용법
ss 는 리눅스 시스템의 소켓 상태를 조회할 수 있는 유틸리티로 netstat 와 비슷한 역할을 수행합니다. 최근 리눅스 배포판은 netstat 보다는 새로운 명령어인 ss 사용을 권장하고 있습니다.
Non listening socket 표시
ss 는 옵션없이 사용하면 listening socket 을 제외하고 현재 연결되어 있는 모든 소켓(TCP/UDP/Unix)을 표시합니다.
non listening socket 표시
$ ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 373921 * 0
u_str ESTAB 0 0 /run/dbus/system_bus_socket 20655 * 20654
u_str ESTAB 0 0 * 21525 * 21526
u_str ESTAB 0 0 * 25002 * 25003
u_str ESTAB 0 0 /run/dbus/system_bus_socket 24327 * 24325
u_str ESTAB 0 0 /run/systemd/journal/stdout 19086 * 19038
u_str ESTAB 0 0 /run/dbus/system_bus_socket 23564 * 23563
모든 소켓 표시
-a 옵션을 주면 listening socket 을 포함한 모든 소켓을 표시합니다.
모든 socket 표시
$ ss -a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:NetworkManager/774 *
nl UNCONN 0 0 rtnl:-192937366 *
nl UNCONN 0 0 rtnl:-192937366 *
nl UNCONN 4352 0 tcpdiag:ss/17032 *
nl UNCONN 768 0 tcpdiag:kernel *
소켓 유형 지정
-f FAMILY 옵션으로 조회할 소켓 유형을 지정할 수 있으며 FAMILY 에는 unix, inet, inet6, link, netlink, vsock 를 지정해 주면 됩니다.
다음 명령어는 unix 소켓과 inet 소켓을 표시합니다.
unix socket 과 inet socket 표시
$ ss -f unix -f inet
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 373921 * 0
u_str ESTAB 0 0 /run/dbus/system_bus_socket 20655 * 20654
u_str ESTAB 0 0 * 21525 * 21526
tcp ESTAB 0 96 172.31.23.247:ssh 192.168.1.13:58068
TCP 유형의 소켓만 표시하려면 -t 옵션을 사용합니다.
TCP socket 표시
$ ss -t
UDP 유형의 소켓만 표시하려면 -u 옵션을 사용하며 -w 는 RAW socket을 -x 는 Unix socket 을 표시합니다. ( -x 옵션은 -f unix 옵션과 동일합니다.)
UDP socket 표시
$ ss -u
listening socket 을 찾는 -l 옵션과 socket 유형을 합치면 local 에서 특정 포트를 listening 하는 소켓을 확인할 수 있으며 아래는 80 포트를 listening 하는 socket 정보를 출력합니다.
TCP 80 포트 리스닝 socket 표시
$ ss -lt src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:http 0.0.0.0:*
source 와 destination 으로 찾기
소켓 유형 뒤에 src :PRTNUM 옵션을 주면 로컬 서버의 특정 포트에 연결한 외부 IP 정보를 알 수 있습니다.
아래는 HTTPS 에 연결한 remote ip 의 목록을 출력합니다.
https 에 연결한 외부 IP
$ ss -t src :443
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 3195 172.31.20.45:https 1.2.3.4:53988
ESTAB 0 0 172.31.20.45:https 1.1.1.1.2:65392
ESTAB 0 0 172.31.20.45:https 4.3.2.1:39589
dst 옵션을 사용하면 목적지 포트에 연결한 소켓 정보를 찾을 수 있으며 다음은 외부의 443 포트에 연결한 소켓 정보를 출력합니다.
https 에 연결한 외부 IP
$ ss -t dst :443
State Recv-Q Send-Q Local Address:Port Peer Address:Port
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:58188 [::ffff:18.136.214.26]:https
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:60696 [::ffff:18.136.214.25]:https
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:56804 [::ffff:18.136.214.24]:https
process 정보 출력
-p 옵션을 사용하면 socket 을 사용하는 프로세스의 정보를 표시하며 다음은 외부의 443 포트에 연결한 프로세스 정보를 출력합니다.
외부 https 에 연결한 프로세스 목록
$ ss -pt dst :443
State Recv-Q Send-Q Local Address:Port Peer Address:Port
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:58188 [::ffff:18.136.214.26]:https users:(("java",pid=3773,fd=63))
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:60696 [::ffff:18.136.214.25]:https users:(("java",pid=3773,fd=74))
CLOSE-WAIT 32 0 [::ffff:172.31.20.45]:56804 [::ffff:18.136.214.24]:https users:(("java",pid=17608,fd=101))