這裡介紹如何在 Linux 系統中使用 ss 指令檢測網路的狀態,並提供許多常用的指令範例。

在 Linux 中若要檢查系統的 socket 狀態,除了使用最傳統的 netstat 指令之外,還有一個 ss 指令也可以達到類似的功能。

基本用法

如果執行 ss 指令,不加任何參數,就會輸出所有已經建立的 TCP 連線:

ss

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

查詢系統上所有使用 IPv4 所開啟的 sockets,並列出每個 sockets 所對應的應用程式:

sudo ss -t4lp

sockets 所對應的應用程式

查詢系統上所有 UDP sockets:

ss -ua

UDP sockets

輸出 sockets 的使用統計表:

ss -s

sockets 使用統計表

篩選器

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