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))


같이 보기