這裡介紹如何在 Linux 系統中使用 ss
指令檢測網路的狀態,並提供許多常用的指令範例。
在 Linux 中若要檢查系統的 socket 狀態,除了使用最傳統的 netstat
指令之外,還有一個 ss
指令也可以達到類似的功能。
基本用法
如果執行 ss
指令,不加任何參數,就會輸出所有已經建立的 TCP 連線:
ss
以下是一些常用的 ss
指令參數:
-n
:以數值的方式顯示連接埠,不要解析為服務名稱。-r
:將 IP 位址解析為主機名稱。-l
:列出傾聽狀態(listening)的 sockets。-a
:顯示所有的 sockets,包含傾聽狀態(listening)與非傾聽狀態(non-listening)。-t
:只列出 TCP 的 sockets。-u
:只列出 UDP 的 sockets。-x
:只列出 Unix 的 sockets。-4
:只列出 IPv4 的 sockets。。-6
:只列出 IPv6 的 sockets。。-p
:顯示使用 sockets 的程式資訊。-e
:顯示 sockets 細部資訊。-i
:顯示 TCP sockets 內部資訊。-o
:顯示 sockets 的計時器(timer)資訊。-s
:輸出 sockets 的使用統計表。
以下是一些常用的參數組合。
查詢系統上所有使用 IPv4 所開啟的 sockets:
ss -t4l
查詢系統上所有使用 IPv4 所開啟的 sockets,並列出每個 sockets 所對應的應用程式:
sudo ss -t4lp
查詢系統上所有 UDP sockets:
ss -ua
輸出 sockets 的使用統計表:
ss -s
篩選器
ss
指令可以自己指定篩選器(filter),篩選出自己需要的 sockets 資訊。
列出從本機連線到 192.168.0.1
這台主機的所有連線:
ss -o state established dst 192.168.0.1
列出從本機連線到 192.168.0.1
主機 80 連接埠的所有連線:
ss -o state established dst 192.168.0.1:80
列出來自於 192.168.0.2
這台主機的所有連線:
ss -o state established src 192.168.0.2
列出所有 ssh 的連線,包含從本機往外的 ssh 連線,以及從外面連線進來的 ssh 連線:
ss -o state established '( dport = :ssh or sport = :ssh )'
查看自己的網頁伺服與 12.34.56.0/24
網段之間,所有的處於 FIN-WAIT-1
狀態的 sockets,並列出其計時器(timer):
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 12.34.56.0/24
ss
指令的完整說明,可以參考 SS Utility 參考手冊。
參考資料:Linux.com、nixCraft、Tecmint