良許 | 網路檢測神器 ss 命令,你可能根本就不會用!
- 2019 年 10 月 3 日
- 筆記
今天我們來介紹一下 Linux ss 命令。
ss 是 Socket Statistics 的縮寫,用來統計 socket 連接的相關資訊,它跟 netstat 差不多,但有著比 netstat 更強大的統計功能,能夠顯示更多更詳細的連接資訊。
剛開始接觸 ss 命令可能會比較困難,我們可通過 ss -h 或者 ss -help 來詳細學習 ss 的選項功能。當然,最好的辦法是直接嘗試一些常用的命令來學習 ss 。
下面我們來了解一下 ss 的一些實用用法。
ss -s 是一個非常有用的命令。它可以按網路傳輸類型顯示總體統計資訊,我們不妨來測試一下:
$ ss -s Total: 524 TCP: 8 (estab 1, closed 0, orphaned 0, timewait 0) Transport Total IP IPv6 RAW 2 1 1 UDP 7 5 2 TCP 8 6 2 INET 17 12 5 FRAG 0 0 0 - RAW Socket 原始套接字。允許直接發送和接收 IP 數據包,無需滿足特定的傳輸協議,用於 namp 等安全應用。
- TCP 傳輸控制協議。是我們網路連接當中的主要連接協議。
- UDP 用戶數據報協議。類似於 TCP 但沒有錯誤檢查。
- INET 包含上述項。( INET4 和 INET6 可以通過一些 ss 命令單獨查看)。
- FRAG 可以理解為碎片的意思。
顯然,上面的輸出結果並沒有直接顯示詳細的 socket 連接情況,我們可以看到最上面的 Total 行顯示的 socket 總數是非常多的,不過,這種分類統計的方式在某些情況下很有用。
如果想要查看具體的 socket 活動資訊,我們可以使用 ss -a 命令,但是我們要做好心理準備查看一大堆的資訊,我們可以先用 wc -l 來統計一下行數試探一波:
$ ss -a | wc -l 555 有木有被嚇到?555 行數據!
不過不必驚慌,我們可以查看指定類別的 socket 活動。
ss -ta轉儲所有 TCP socketss -ua轉儲所有 UDP socketss -wa轉儲所有 RAW socketss -xa轉儲所有 UNIX socketss -4a轉儲所有 IPV4 socketss -6a轉儲所有 IPV6 socket
不帶參數的 ss 命令會顯示所有已經建立的 socket 連接。為了方便閱讀,這裡只顯示一頁的資訊,省略其他大部分資訊:
$ ss | more Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 20863 * 20864 u_str ESTAB 0 0 * 32232 * 33018 u_str ESTAB 0 0 * 33147 * 3257544ddddy u_str ESTAB 0 0 /run/user/121/bus 32796 * 32795 u_str ESTAB 0 0 /run/user/121/bus 32574 * 32573 u_str ESTAB 0 0 * 32782 * 32783 u_str ESTAB 0 0 /run/systemd/journal/stdout 19091 * 18113 u_str ESTAB 0 0 * 769568 * 768429 u_str ESTAB 0 0 * 32560 * 32561 u_str ESTAB 0 0 @/tmp/dbus-8xbBdjNe 33155 * 33154 u_str ESTAB 0 0 /run/systemd/journal/stdout 32783 * 32782 … tcp ESTAB 0 64 192.168.0.16:ssh 192.168.0.6:25944 tcp ESTAB 0 0 192.168.0.16:ssh 192.168.0.6:5385 要查看剛建立的 TCP 連接,使用 ss -t :
$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 64 192.168.0.16:ssh 192.168.0.6:25944 ESTAB 0 0 192.168.0.16:ssh 192.168.0.9:5385 要僅顯示監聽 socket ,嘗試 ss -lt :
$ ss -lt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 10 127.0.0.1:submission 0.0.0.0:* LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:* LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* LISTEN 0 5 127.0.0.1:ipp 0.0.0.0:* LISTEN 0 10 127.0.0.1:smtp 0.0.0.0:* LISTEN 0 128 [::]:ssh [::]:* LISTEN 0 5 [::1]:ipp [::]:* 若你想要顯示埠號而不是服務名,則 ss -ltn :
$ ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 10 127.0.0.1:587 0.0.0.0:* LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 10 127.0.0.1:25 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:* 這裡就先介紹這麼多,其他的詳細內容請參考幫助手冊( ss -h)。
另外,這裡提供一些小技巧,你可以將那些最有用的選項轉換為別名,能讓你更容易使用。例如:
$ alias listen="ss -lt" $ alias socksum="ss -s" -----------------
我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注我的公眾號「良許Linux」,回復「1024」獲取最新最全的技術資料,回復「入群」進入高手如雲技術交流群。
