命令行工具--ss


命令行工具--ss

一、介紹

ss通常用來顯示socket 狀態,它顯示的信息和netstat很像,但是它能夠顯示更多的TCP和狀態信息。

ss命令是Linux CentOS 7iproute軟件包的一部分,默認已經安裝。

二、優點

為什么不用其他的命令,而是選擇用這個,因為ss命令更高效,相比常見的 netstat 更快,當服務器的連接數量變得非常大的時候,無論是使用netstat命令還是直接cat /proc/net/tcp,執行速度都很慢,ss 命令利用了TCP協議棧中的tcp_diag,tcp_diag是一個用於分析統計的模塊,可以獲得linux內核中的第一手信息,因此性能更好一些。

三、用法

[root@test ~]# ss --help
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message
   -V, --version       output version information
   -n, --numeric       don't resolve service names
   -r, --resolve       resolve host names
   -a, --all           display all sockets
   -l, --listening     display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes     show process using socket
   -i, --info          show internal TCP information
   -s, --summary       show socket usage summary
   -b, --bpf           show bpf filter socket information
   -E, --events        continually display sockets as they are destroyed
   -Z, --context       display process SELinux security contexts
   -z, --contexts      display process and socket SELinux security contexts
   -N, --net           switch to the specified network namespace name

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet        display PACKET sockets
   -t, --tcp           display only TCP sockets
   -S, --sctp          display only SCTP sockets
   -u, --udp           display only UDP sockets
   -d, --dccp          display only DCCP sockets
   -w, --raw           display only RAW sockets
   -x, --unix          display only Unix domain sockets
       --vsock         display only vsock sockets
   -f, --family=FAMILY display sockets of type FAMILY
       FAMILY := {inet|inet6|link|unix|netlink|vsock|help}

   -K, --kill          forcibly close sockets, display what was closed
   -H, --no-header     Suppress header line

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}

四、案例

1、列出已建立的連接

默認情況下,如果我們運行ss命令而沒有指定其他選項,它將顯示所有已建立連接的打開的非偵聽套接字的列表,例如TCPUDPUNIX套接字。

[root@renwolecom ~]# ss | head -n 5
Netid  State  Recv-Q Send-Q Local Address:Port   Peer Address:Port
u_str  ESTAB  0      0       * 19098                 * 18222
u_str  ESTAB  0      0       * 19441                 * 19440
u_str  ESTAB  0      0       * 19440                 * 19441
u_str  ESTAB  0      0       * 19396                 * 19397

2、顯示監聽套接字

我們可以使用-l選項專門列出當前正在偵聽連接的套接字,而不是列出所有的套接字。

[root@renwolecom ~]# ss -lt
State   Recv-Q Send-Q    Local Address:Port       Peer Address:Port
LISTEN  0      128                   *:http                  *:*
LISTEN  0      100           127.0.0.1:smtp                  *:*
LISTEN  0      128                   *:entexthigh            *:*
LISTEN  0      128       172.28.204.62:zabbix-trapper        *:*
LISTEN  0      128           127.0.0.1:cslistener            *:*
LISTEN  0      80                   :::mysql                :::*
LISTEN  0      100                 ::1:smtp                 :::*
LISTEN  0      128                  :::entexthigh           :::*

在這個示例中,我們還使用-t選項只列出TCP,稍后將對此進行詳細說明。在后面的例子中,你會看到我將結合多種選擇,以快速過濾掉,從而達到我們的目的。

3、顯示進程

我們可以用-p選項打印出擁有套接字的進程或PID號。

[root@renwolecom ~]# ss -pl

Netid  State      Recv-Q Send-Q Local Address:Port     Peer Address:Port
tcp    LISTEN     0      128    :::http                :::*                 users:(("httpd",pid=10522,fd=4),("httpd",pid=10521,fd=4),("httpd",pid=10520,fd=4),("httpd",pid=10519,fd=4),("httpd",pid=10518,fd=4),("httpd",pid=10516,fd=4))

在上面的例子中我只列出了一個結果,沒有進行進一步選項,因為ss的完整輸出打印出超過500行到標准輸出。所以我只列出一條結果,由此我們可以看到服務器上運行的各種Apache進程ID。

4、不解析服務名稱

默認情況下,ss只會解析端口號,例如在下面的行中,我們可以看到172.28.204.62:mysql,其中mysql被列為本地端口。

[root@renwolecom ~]# ss
Netid State Recv-Q Send-Q   Local Address:Port       Peer Address:Port
tcp   ESTAB 0      0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:38920
tcp   ESTAB 0      0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51598
tcp   ESTAB 0      0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51434
tcp   ESTAB 0      0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:36360

但是,如果我們指定-n選項,看到的是端口號而不是服務名稱。

[root@renwolecom ~]# ss -n
Netid State Recv-Q Send-Q   Local Address:Port       Peer Address:Port
tcp   ESTAB 0      0 ::ffff:172.28.204.62:3306  ::ffff:172.28.204.62:38920
tcp   ESTAB 0      0 ::ffff:172.28.204.62:3306  ::ffff:172.28.204.62:51598
tcp   ESTAB 0      0 ::ffff:172.28.204.62:3306  ::ffff:172.28.204.62:51434
tcp   ESTAB 0      0 ::ffff:172.28.204.62:3306  ::ffff:172.28.204.62:36360

現在顯示3306,而非mysql,因為禁用了主機名和端口的所有名稱解析。另外你還可以查看/etc/services得到所有服務對應的端口列表。

5、解析數字地址/端口

-r選項可以解析IP地址和端口號。用此方法可以列出172.28.204.62服務器的主機名。

[root@renwolecom ~]# ss -rNetid  State  Recv-Q Send-Q        Local Address:Port      Peer Address:Port
tcp    ESTAB      0      0         renwolecom:mysql        renwolecom:48134

6、IPv4套接字

我們可以通過-4選項只顯示與IPv4套接字對應的信息。在下面的例子中,我們還使用-l選項列出了在IPv4地址上監聽的所有內容。

[root@renwolecom ~]# ss -l4
Netid State      Recv-Q Send-Q  Local Address:Port            Peer Address:Port
tcp   LISTEN     0      128                 *:http                       *:*
tcp   LISTEN     0      100         127.0.0.1:smtp                       *:*
tcp   LISTEN     0      128                 *:entexthigh                 *:*
tcp   LISTEN     0      128     172.28.204.62:zabbix-trapper             *:*
tcp   LISTEN     0      128         127.0.0.1:cslistener                 *:*

7、IPv6套接字

同樣,我們可以使用-6選項只顯示與IPv6套接字相關信息。在下面的例子中,我們還使用-l選項列出了在IPv6地址上監聽的所有內容。

[root@renwolecom ~]# ss -l6
Netid State      Recv-Q Send-Q  Local Address:Port            Peer Address:Port
udp   UNCONN     0      0                  :::ipv6-icmp                 :::*
udp   UNCONN     0      0                  :::ipv6-icmp                 :::*
udp   UNCONN     0      0                  :::21581                     :::*
tcp   LISTEN     0      80                 :::mysql                     :::*
tcp   LISTEN     0      100               ::1:smtp                      :::*
tcp   LISTEN     0      128                :::entexthigh                :::*

8、只顯示TCP

-t選項只顯示TCP套接字。當與-l結合只打印出監聽套接字時,我們可以看到所有在TCP上偵聽的內容。

[root@renwolecom ~]# ss -lt
State       Recv-Q Send-Q    Local Address:Port               Peer Address:Port
LISTEN      0      128                   *:http                          *:*
LISTEN      0      100           127.0.0.1:smtp                          *:*
LISTEN      0      128                   *:entexthigh                    *:*
LISTEN      0      128       172.28.204.62:zabbix-trapper                *:*
LISTEN      0      128           127.0.0.1:cslistener                    *:*
LISTEN      0      80                   :::mysql                        :::*
LISTEN      0      100                 ::1:smtp                         :::*
LISTEN      0      128                  :::entexthigh                   :::*

9、顯示UDP

-u選項可用於僅顯示UDP套接字。由於UDP是一種無連接的協議,因此只運行-u選項將不顯示輸出,我們可以將它與-a-l選項結合使用,來查看所有偵聽UDP套接字,如下所示:

[root@renwolecom ~]# ss -ul
State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port
UNCONN     0      0              *:sunwebadmins                 *:*
UNCONN     0      0              *:etlservicemgr                *:*
UNCONN     0      0              *:dynamid                      *:*
UNCONN     0      0              *:9003                         *:*
UNCONN     0      0              *:9004                         *:*
UNCONN     0      0      127.0.0.1:terabase                     *:*
UNCONN     0      0              *:56803                        *:*

10、Unix套接字

-x選項只能用來顯示unix域套接字。

[root@renwolecom ~]# ss -x
Netid State Recv-Q Send-Q                    Local Address:Port Peer Address:Port
u_str ESTAB 0      0 /tmp/zabbix_server_preprocessing.sock 23555           * 21093
u_str ESTAB 0      0          /tmp/zabbix_server_ipmi.sock 20155           * 19009
u_str ESTAB 0      0 /tmp/zabbix_server_preprocessing.sock 19354           * 22573
u_str ESTAB 0      0 /tmp/zabbix_server_preprocessing.sock 21844           * 19375
...

11、顯示所有信息

-a選項顯示所有的監聽和非監聽套接字,在TCP的情況下,這意味着已建立的連接。這個選項與其他的組合很有用,例如可以添加-a選項顯示所有的UDP套接字,默認情況下只有-u選項我們看不到多少信息。

[root@renwolecom ~]# ss -u
Recv-Q Send-Q Local Address:Port                 Peer Address:Port
0      0      172.28.204.66:36371                    8.8.8.8:domain
[root@renwolecom ~]# ss -ua
State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port
UNCONN     0      0                 *:sunwebadmins                    *:*
UNCONN     0      0                 *:etlservicemgr                   *:*
UNCONN     0      0                 *:dynamid                         *:*
UNCONN     0      0                 *:9003                            *:*
UNCONN     0      0                 *:9004                            *:*
UNCONN     0      0         127.0.0.1:terabase                        *:*
UNCONN     0      0                 *:56803                           *:*
ESTAB      0      0      172.28.204.66:36371                     8.8.8.8:domain

12、顯示套接字內存使用情況

-m選項可用於顯示每個套接字使用的內存量。

[root@renwolecom ~]# ss -ltm
State   Recv-Q Send-Q  Local Address:Port Peer Address:Port
LISTEN  0      128                 *:http           *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      100         127.0.0.1:smtp           *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      128                 *:entexthigh     *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      128     172.28.204.62:zabbix-trapper *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      128         127.0.0.1:cslistener     *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      80                 :::mysql         :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      100               ::1:smtp          :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN  0      128                :::entexthigh    :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)

13、顯示TCP內部信息

我們可以使用-i選項請求額外的內部TCP信息。

[root@renwolecom ~]# ss -lti
State       Recv-Q Send-Q Local Address:Port         Peer Address:Port
LISTEN      0      128               *:chimera-hwm              *:*  bbr cwnd:10
LISTEN      0      128               *:etlservicemgr            *:*  bbr cwnd:10
LISTEN      0      128   172.28.204.66:27017                    *:*  bbr cwnd:10
LISTEN      0      128       127.0.0.1:27017                    *:*  bbr cwnd:10
LISTEN      0      128               *:dynamid                  *:*  bbr cwnd:10
LISTEN      0      128               *:9003                     *:*  bbr cwnd:10
LISTEN      0      128               *:9004                     *:*  bbr cwnd:10
LISTEN      0      128               *:http                     *:*  bbr cwnd:10
LISTEN      0      128               *:ssh                      *:*  bbr cwnd:10
LISTEN      0      100       127.0.0.1:smtp                     *:*  bbr cwnd:10
LISTEN      0      128               *:sunwebadmins             *:*  bbr cwnd:10
LISTEN      0      128              :::ssh                     :::*  bbr cwnd:10

在每個偵聽套接字下面,我們可以看到更多信息。注意:-i選項不適用於UDP,如果您指定-u,而非-t,則不會顯示這些額外的信息。

14、顯示統計信息

我們可以使用-s選項快速查看統計數據。

[root@renwolecom ~]# ss -s
Total: 798 (kernel 1122)
TCP:   192 (estab 99, closed 81, orphaned 0, synrecv 0, timewait 1/0), ports 0

Transport Total     IP        IPv6
*         1122      -         -
RAW       1         0         1
UDP       0         0         0
TCP       111       59        52
INET      112       59        53
FRAG      0         0         0

這使我們能夠快速看到已建立連接的總數,及各種類型的套接字的計數和IPv4或IPv6的使用情況。

15、基於狀態的過濾器

我們可以指定一個套接字的狀態,只打印這個狀態下的套接字。例如,我們可以指定包括已建立, established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack監聽和關閉等狀態。以下示例顯示了所有建立的TCP連接。為了生成這個,我通過SSH連接到了服務器,並從Apache加載了一個網頁。然后我們可以看到與Apache的連接迅速轉變為等待時間。

[root@renwolecom ~]# ss -t state established
Recv-Q Send-Q       Local Address:Port              Peer Address:Port
0      52           172.28.204.67:ssh              123.125.71.38:49518
0      0     ::ffff:172.28.204.67:http      ::ffff:123.125.71.38:49237
[root@renwolecom ~]# ss -t state established
Recv-Q Send-Q       Local Address:Port              Peer Address:Port
0      0            172.28.204.67:ssh            103.240.143.126:55682
0      52           172.28.204.67:ssh              123.125.71.38:49518
0      0     ::ffff:172.28.204.67:http      ::ffff:123.125.71.38:49262

16、根據端口號進行過濾

可以通過過濾還可以列出小於(lt),大於(gt),等於(eq),不等於(ne),小於或等於(le),或大於或等於(ge)的所有端口。

例如,以下命令顯示端口號為500或以下的所有偵聽端口:

[root@renwolecom ~]# ss -ltn sport le 500
State       Recv-Q Send-Q Local Address:Port        Peer Address:Port
LISTEN      0      128                *:80                     *:*
LISTEN      0      100        127.0.0.1:25                     *:*
LISTEN      0      100              ::1:25                    :::*

為了進行比較,我們可以執行相反的操作,並查看大於500的所有端口:

[root@renwolecom ~]# ss -ltn sport gt 500
State       Recv-Q Send-Q Local Address:Port        Peer Address:Port
LISTEN      0      128                *:12002                  *:*
LISTEN      0      128    172.28.204.62:10051                  *:*
LISTEN      0      128        127.0.0.1:9000                   *:*
LISTEN      0      80                :::3306                  :::*
LISTEN      0      128               :::12002                 :::*

我們還可以根據源或目標端口等項進行篩選,例如,我們搜索具有SSH源端口運行的TCP套接字:

[root@renwolecom ~]# ss -t '( sport = :ssh )'
State       Recv-Q Send-Q    Local Address:Port     Peer Address:Port
ESTAB       0      0         172.28.204.66:ssh     123.125.71.38:50140

17、顯示SELinux上下文

-Z`與`-z`選項可用於顯示套接字的SELinux安全上下文。 在下面的例子中,我們使用`-t`和-l`選項來列出偵聽的TCP套接字,使用-Z選項我們也可以看到SELinux的上下文。
[root@renwolecom ~]# ss -tlZ
State  Recv-Q Send-Q  Local Address:Port        Peer Address:Port
LISTEN 0      128                 *:sunrpc                 *:*
users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
LISTEN 0      5       172.28.204.62:domain                 *:*
users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
LISTEN 0      128                 *:ssh                    *:*
users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
LISTEN 0      128         127.0.0.1:ipp                    *:*
users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
LISTEN 0      100         127.0.0.1:smtp                   *:*
users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))

18、顯示版本號

-v選項可用於顯示ss命令的特定版本信息,在這種情況下,我們可以看到提供ssiproute包的版本。

[root@renwolecom ~]# ss -v
ss utility, iproute2-ss130716

19、顯示幫助文檔信息

-h選項可用於顯示有關ss命令的進一步的幫助,如果需要對最常用的一些選項進行簡短說明,則可以將其用作快速參考。 請注意:這里並未輸入完整列表。

[root@renwolecom ~]# ss -h
Usage: ss [ OPTIONS ]

20、顯示擴展信息

我們可以使用-e選項來顯示擴展的詳細信息,如下所示,我們可以看到附加到每條行尾的擴展信息。

[root@renwolecom ~]# ss -lte
State  Recv-Q Send-Q Local Address:Port   Peer Address:Port
LISTEN 0      128                *:sunrpc *:*      ino:16090 sk:ffff880000100000 <->
LISTEN 0      5      172.28.204.62:domain *:*      ino:23750 sk:ffff880073e70f80 <->
LISTEN 0      128                *:ssh    *:*      ino:22789 sk:ffff880073e70000 <->
LISTEN 0      128        127.0.0.1:ipp    *:*      ino:23091 sk:ffff880073e707c0 <->
LISTEN 0      100        127.0.0.1:smtp   *:*      ino:24659 sk:ffff880000100f80 <->

21、顯示計時器信息

-o選項可用於顯示計時器信息。該信息向我們展示了諸如重新傳輸計時器值、已經發生的重新傳輸的數量以及已發送的keepalive探測的數量。

[root@renwolecom ~]# ss -to
State      Recv-Q Send-Q Local Address:Port      Peer Address:Port
ESTAB      0      52     172.28.204.67:ssh      123.125.71.38:49518timer:(on,406ms,0)
LAST-ACK   0      1      172.28.204.67:ssh    103.240.143.126:49603timer:(on,246ms,0)

總結:

現在你應該對ss有了初步的認識。如果你想使用ss命令快速檢查有關套接字的各種信息,建議你查閱ss的相關手冊。

轉載自: https://blog.51cto.com/net881004


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM