ss,它是 iproute2 包附帶的另一個工具,允許你查詢 socket 的有關統計資訊。可以完成 netstat 同樣的任務,但是,ss 稍微快一點而且命令更簡短。
直接輸入 ss,預設會顯示與 netstat 同樣的內容,並且輸入類似的引數可以獲取你想要的類似輸出。例如:
$ ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 127.0.0.1:postgresql 127.0.0.1:48154
ESTAB 0 0 192.168.0.136:35296 192.168.0.120:8009
ESTAB 0 0 192.168.0.136:47574 173.194.74.189:https
[…]
ss -t 只顯示 TCP 連線。 ss -u 用於顯示 UDP 連線,-l 引數只會顯示監聽的埠,而且可以進一步過濾到任何想要的資訊。
我並沒有測試所有可用引數,但是你甚至可以使用 -K 強制關閉 socket 。
ss 真正耀眼的地方是其內建的過濾能力。讓我們列出所有埠為 22(ssh)的連線:
$ ss state all sport = :ssh
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:ssh *:*
tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540
tcp LISTEN 0 128 :::ssh :::*
如果只想看已建立的 socket(排除了 listening 和 closed):
$ ss state connected sport = :ssh
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540
類似的,可以列出指定的 host 或者 ip 段。例如,列出到達 74.125.0.0/16 子網的連線,這個子網屬於 Google:
$ ss state all dst 74.125.0.0/16
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.0.136:33616 74.125.142.189:https
tcp ESTAB 0 0 192.168.0.136:42034 74.125.70.189:https
tcp ESTAB 0 0 192.168.0.136:57408 74.125.202.189:https
ss 與 iptables 的語法非常相同,如果已經熟悉了其語法,ss 非常容易上手。也可以安裝 iproute2-doc 包, 透過 /usr/share/doc/iproute2-doc/ss.html 獲得完整檔案。