ss 是 Socket Statistics 的縮寫。ss 命令可以用來獲取 socket 統(tǒng)計信息,它顯示的內(nèi)容和 netstat 類似。但 ss 的優(yōu)勢在于它能夠顯示更多更詳細的有關(guān) TCP 和連接狀態(tài)的信息,而且比 netstat 更快。當服務器的 socket 連接數(shù)量變得非常大時,無論是使用 netstat 命令還是直接 cat /proc/net/tcp,執(zhí)行速度都會很慢。ss 命令利用到了 TCP 協(xié)議棧中 tcp_diag。tcp_diag 是一個用于分析統(tǒng)計的模塊,可以獲得 Linux 內(nèi)核中第一手的信息,因此 ss 命令的性能會好很多。
常用選項
-h, --help 幫助
-V, --version 顯示版本號
-t, --tcp 顯示 TCP 協(xié)議的 sockets
-u, --udp 顯示 UDP 協(xié)議的 sockets
-x, --unix 顯示 unix domain sockets,與 -f 選項相同
-n, --numeric 不解析服務的名稱linux命令大全,如 "22" 端口不會顯示成 "ssh"
-l, --listening 只顯示處于監(jiān)聽狀態(tài)的端口
-p, --processes 顯示監(jiān)聽端口的進程(Ubuntu 上需要 sudo)
-a, --all 對 TCP 協(xié)議來說,既包含監(jiān)聽的端口,也包含建立的連接
-r, --resolve 把 IP 解釋為域名,把端口號解釋為協(xié)議名稱
常見用例
如果不添加選項 ss 命令默認輸出所有建立的連接(不包含監(jiān)聽的端口),包括 tcp, udp, and unix socket 三種類型的連接:
查看主機監(jiān)聽的端口
$ ss -tnl
通過 -r 選項解析 IP 和端口號
$ ss -tlr
使用 -p 選項查看監(jiān)聽端口的程序名稱
$ sudo ss -tlp
最后一列就是運行的程序名稱。還可以通過 grep 繼續(xù)過濾:
$ sudo ss -tlp | grep ssh
查看建立的 TCP 連接
-a --all 對 TCP 協(xié)議來說,既包含監(jiān)聽的端口,也包含建立的連接
$ ss -tna
顯示更多的信息
-o, --options 顯示時間信息
-m, --memory 顯示 socket 使用的內(nèi)存
-i, --info 顯示更多 TCP 內(nèi)部的信息
顯示概要信息
$ ss -s
dst/src dport/sport 語法
可以通過 dst/src/dport/sprot 語法來過濾連接的來源和目標,來源端口和目標端口。
匹配遠程地址和端口號
$ ss dst 192.168.1.5 $ ss dst 192.168.119.113:http $ ss dst 192.168.119.113:443
匹配本地地址和端口號
$ ss src 192.168.119.103 $ ss src 192.168.119.103:http $ ss src 192.168.119.103:80
將本地或者遠程端口和一個數(shù)比較
可以使用下面的語法做端口號的過濾:
$ ss dport OP PORT $ ss sport OP PORT
OP 可以代表以下任意一個:
<=
小于或等于某個端口號
>=
大于或等于某個端口號
等于某個端口號
不等于某個端口號
大于某個端口號
小于某個端口號
下面是一個簡單的 demo(注意,需要對尖括號使用轉(zhuǎn)義符):
$ ss -tunl sport lt 50 $ ss -tunl sport \< 50