linux socket 상태를 조회하는 ss(socket statistics) 명령어 사용법
ss 는 리눅스 시스템의 소켓 상태를 조회할 수 있는 유틸리티로 netstat 와 비슷한 역할을 수행합니다. 최근 리눅스 배포판은 netstat 보다는 새로운 명령어인 ss 사용을 권장하고 있습니다.
Non listening socket 표시
ss 는 옵션없이 사용하면 listening socket 을 제외하고 현재 연결되어 있는 모든 소켓(TCP/UDP/Unix)을 표시합니다.
$ 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 을 포함한 모든 소켓을 표시합니다.
$ 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 소켓을 표시합니다.
$ 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 옵션을 사용합니다.
$ ss -t
UDP 유형의 소켓만 표시하려면 -u 옵션을 사용하며 -w 는 RAW socket을 -x 는 Unix socket 을 표시합니다. ( -x 옵션은 -f unix 옵션과 동일합니다.)
$ ss -u
listening socket 을 찾는 -l 옵션과 socket 유형을 합치면 local 에서 특정 포트를 listening 하는 소켓을 확인할 수 있으며 아래는 80 포트를 listening 하는 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 의 목록을 출력합니다.
$ 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 포트에 연결한 소켓 정보를 출력합니다.
$ 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 포트에 연결한 프로세스 정보를 출력합니다.
$ 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))