1、ss指令簡介
ss 是 Socket Statistics 的縮寫。ss 指令可以用來擷取 socket 統計資訊,它顯示的内容和 netstat 類似。但 ss 的優勢在于它能夠顯示更多更詳細的有關 TCP 和連接配接狀态的資訊,而且比 netstat 更快。當伺服器的 socket 連接配接數量變得非常大時,無論是使用 netstat 指令還是直接 cat /proc/net/tcp,執行速度都會很慢。ss 指令利用到了 TCP 協定棧中 tcp_diag。tcp_diag 是一個用于分析統計的子產品,可以獲得 Linux 核心中第一手的資訊,是以 ss 指令的性能會好很多。
2、常用選項
-h, --help 幫助
-V, --version 顯示版本号
-t, --tcp 顯示 TCP 協定的 sockets
-u, --udp 顯示 UDP 協定的 sockets
-x, --unix 顯示 unix domain sockets,與 -f 選項相同
-n, --numeric 不解析服務的名稱,如 "22" 端口不會顯示成 "ssh"
-l, --listening 隻顯示處于監聽狀态的端口
-p, --processes 顯示監聽端口的程序(Ubuntu 上需要 sudo)
-a, --all 對 TCP 協定來說,既包含監聽的端口,也包含建立的連接配接
-r, --resolve 把 IP 解釋為域名,把端口号解釋為協定名稱
3、常見用例
(1)如果不添加選項 ss 指令預設輸出所有建立的連接配接(不包含監聽的端口),包括 tcp, udp, and unix socket 三種類型的連接配接:
ss

(2)檢視主機監聽的tcp端口資訊
ss -tnl
(3)使用-r,将ip位址、端口号解析為域名和協定名
ss -tlr
(4)檢視監聽端口的程式程序
ss -tlp
(5)檢視監理的tcp連結
ss -tna
注:-a --all 對 TCP 協定來說,既包含監聽的端口,也包含建立的連接配接
(6)顯示更詳細的資訊
-o, --options 顯示時間資訊
-m, --memory 顯示 socket 使用的記憶體
-i, --info 顯示更多 TCP 内部的資訊
(7)顯示概要資訊
ss -s
(8)dst/src dport/sport 文法
可以通過 dst/src/dport/sprot 文法來過濾連接配接的來源和目标,來源端口和目标端口。
A、比對遠端位址和端口号
ss dst 192.168.0.100
ss dst 192.168.0.100:ssh
ss dst 192.168.0.100:22
B、比對本地位址和端口号
ss src 192.168.0.240
ss src 192.168.0.240:http
ss src 192.168.0.240:80
C、将本地或者遠端端口和一個數比較
可以使用下面的文法做端口号的過濾:
ss dport OP PORT
ss sport OP PORT
OP 可以代表以下任意一個:
<= :le 小于或等于某個端口号
= :ge 大于或等于某個端口号
== :eq 等于某個端口号
!= :ne 不等于某個端口号
:gt 大于某個端口号
< :lt 小于某個端口号
注意,需要對尖括号使用轉義符
ss -tunl sport gt 30
ss -tunl sport \> 30
(9)通過 TCP 的狀态進行過濾
ss 指令還可以通過 TCP 連接配接的狀态程序過濾,支援的 TCP 協定中的狀态有:
established/syn-sent/syn-recv/fin-wait-1/fin-wait-2/time-wait/closed/close-wait/last-ack/listening/closing
除了上面的 TCP 狀态,還可以使用下面這些狀态:
all:列出所有的 TCP 狀态。
connected:列出除了 listening 和 closing 之外的所有 TCP 狀态。
synchronized:列出除了 syn-sent 之外的所有 TCP 狀态。
bucket:列出 maintained 的狀态,如:time-wait 和 syn-recv。
big:列出和 bucket 相反的狀态。
A、使用 ipv4 時的過濾文法
ss -4 state listening
ss -4n state established
ss -4n state established '( sport = :22 )'
ss -4n state established '( sport = :ssh )'
ss -n state established