如何在 Linux 上使用 ss 命令
已發表: 2022-01-29 ss
命令是經典netstat
的現代替代品。 您可以在 Linux 上使用它來獲取有關網絡連接的統計信息。 以下是如何使用這個方便的工具。
ss 命令與 netstat
作為已棄用的netstat
命令的替代品, ss
為您提供有關您的計算機如何與其他計算機、網絡和服務通信的詳細信息。
ss
顯示傳輸控制協議 (TCP)、用戶數據報協議 (UDP)、Unix(進程間)和原始套接字的統計信息。 原始套接字在網絡 OSI 級別運行,這意味著 TCP 和 UDP 標頭必須由應用軟件處理,而不是由傳輸層處理。 Internet 控制消息協議 (ICMP) 消息和 ping 實用程序都使用原始套接字。
使用 ss
您不必安裝ss
,因為它已經是最新 Linux 發行版的一部分。 然而,它的輸出可能很長——我們的結果包含超過 630 行。 結果也很廣泛。
因此,我們包含了我們獲得的結果的文本表示,因為它們不適合屏幕截圖。 我們對它們進行了修剪,使它們更易於管理。
列出網絡連接
使用不帶命令行選項的ss
會列出非偵聽的套接字。 也就是說,它列出了不處於偵聽狀態的套接字。
要查看此內容,請鍵入以下內容:
ss
Netid State Recv-Q Send-Q 本地地址:端口 對端地址:端口進程 u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688 u_str ESTAB 0 0 * 35550 * 35551 ... u_str ESTAB 0 0 * 38127 * 38128 u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242 u_str ESTAB 0 0 * 19039 * 19040 u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306 icmp6 UNCONN 0 0 *:ipv6-icmp *:* udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
列如下:
- Netid :套接字的類型。 在我們的示例中,我們有“u_str”,一個 Unix 流,一個“udp”和“icmp6”,一個 IP 版本 6 ICMP 套接字。 您可以在 Linux 手冊頁中找到有關 Linux 套接字類型的更多描述。
- State :套接字所處的狀態。
- Recv-Q :接收到的數據包數。
- Send-Q :發送數據包的數量。
- Local Address:Port :本地地址和端口(或 Unix 套接字的等效值)。
- Peer Address:Port :遠程地址和端口(或 Unix 套接字的等效值)。
對於 UDP 套接字,“狀態”列通常為空白。 對於 TCP 套接字,它可以是以下之一:
- LISTEN:僅限服務器端。 套接字正在等待連接請求。
- SYN-SENT:僅限客戶端。 此套接字已發出連接請求,正在等待查看它是否被接受。
- SYN-RECEIVED:僅限服務器端。 此套接字在接受連接請求後正在等待連接確認。
- 已建立:服務器和客戶端。 服務器和客戶端之間已經建立了工作連接,允許在兩者之間傳輸數據。
- FIN-WAIT-1:服務器和客戶端。 此套接字正在等待來自遠程套接字的連接終止請求,或者等待先前從該套接字發送的連接終止請求的確認。
- FIN-WAIT-2:服務器和客戶端。 此套接字正在等待來自遠程套接字的連接終止請求。
- CLOSE-WAIT:服務器和客戶端。 此套接字正在等待來自本地用戶的連接終止請求。
- 關閉:服務器和客戶端。 此套接字正在等待來自遠程套接字的連接終止請求確認。
- LAST-ACK:服務器和客戶端。 此套接字正在等待它發送到遠程套接字的連接終止請求的確認。
- TIME-WAIT:服務器和客戶端。 這個套接字向遠程套接字發送一個確認,讓它知道它收到了遠程套接字的終止請求。 現在正在等待以確保收到確認。
- CLOSED:沒有連接,所以套接字已經終止。
列出監聽套接字
要查看監聽套接字,我們將添加-l
(監聽)選項,如下所示:
ss -l
Netid State Recv-Q Send-Q 本地地址:端口 對端地址:端口進程 nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 u_str LISTEN 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
這些套接字都是未連接的並且正在偵聽。 “rtnl”表示路由netlink,用於在內核和用戶空間進程之間傳輸信息。
列出所有套接字
要列出所有套接字,您可以使用-a
(全部)選項:
ss -a
Netid State Recv-Q Send-Q 本地地址:端口 對端地址:端口進程 nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 100 公共/showq 23222 * 0 u_str LISTEN 0 100 私有/錯誤 23225 * 0 u_str LISTEN 0 100 私有/重試 23228 * 0 ... udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* ... tcp LISTEN 0 128 [::]:ssh [::]:* tcp LISTEN 0 5 [::1]:ipp [::]:* tcp LISTEN 0 100 [::1]:smtp [::]:*
輸出包含所有套接字,無論狀態如何。
列出 TCP 套接字
您還可以應用過濾器,以便僅顯示匹配的套接字。 我們將使用-t
(TCP) 選項,因此只會列出 TCP 套接字:
ss -a -t
列出 UDP 套接字
-u
(UDP) 選項執行相同類型的過濾操作。 這一次,我們將只看到 UDP 套接字:
ss -a -u
State Recv-Q Send-Q 本地地址:端口對端地址:端口進程 UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* UNCONN 0 0 0.0.0.0:60734 0.0.0.0:* UNCONN 0 0 127.0.0.53%lo: 域 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps UNCONN 0 0 [::]:mdns [::]:* UNCONN 0 0 [::]:51193 [::]:*
列出 Unix 套接字
要僅查看 Unix 套接字,您可以包含-x
(Unix) 選項,如下所示:
ss -a -x
Netid State Recv-Q Send-Q 本地地址:端口 對端地址:端口進程 u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ... u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
列出原始套接字
原始套接字的過濾器是-w
(原始)選項:
ss -a -w
列出 IP 版本 4 套接字
可以使用-4
(IPV4) 選項列出使用 TCP/IP 版本 4 協議的套接字:
ss -a -4
列出 IP 版本 6 套接字
您可以使用-6
(IPV6) 選項打開匹配的 IP 版本 6 過濾器,如下所示:
ss -a -6
按狀態列出套接字
您可以使用state
選項按其所處的狀態列出套接字。 這適用於已建立、正在偵聽或已關閉的狀態。 我們還將使用解析選項 ( -r
),它嘗試將網絡地址解析為名稱,並將端口解析為協議。
以下命令將查找已建立的 TCP 連接,並且ss
將嘗試解析名稱:
ss -t -r 狀態建立
列出了四個處於已建立狀態的連接。 主機名 ubuntu20-04 已被解析,第二行的 SSH 連接顯示“ssh”而不是 22。
我們可以重複這個來尋找處於監聽狀態的套接字:
ss -t -r 狀態監聽
Recv-Q Send-Q 本地地址:端口對端地址:端口進程 0 128 本地主機:5939 0.0.0.0:* 0 4096 localhost%lo: 域 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 本地主機:ipp 0.0.0.0:* 0 100 本地主機:smtp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:smtp [::]:*
按協議列出套接字
您可以使用具有dport
和sport
選項的特定協議列出套接字,它們分別代表目標和源端口。
我們鍵入以下內容以在已established
的連接上使用 HTTPS 協議列出套接字(注意左括號之後和右括號之前的空格):
ss -a state 建立'( dport = :https 或 sport = :https )'
我們可以使用協議名稱或通常與該協議關聯的端口。 Secure Shell (SSH) 的默認端口是端口 22。
我們將在一個命令中使用協議名稱,然後使用端口號重複它:
ss -a '( dport = :ssh 或運動 = :ssh )'
ss -a '( dport = :22 或運動 = :22 )'
正如預期的那樣,我們得到了相同的結果。
列出到特定 IP 地址的連接
使用dst
(目標)選項,我們可以列出到特定目標 IP 地址的連接。
我們輸入以下內容:
ss -a dst 192.168.4.25
識別流程
要查看哪些進程正在使用套接字,您可以使用 processes 選項 ( -p
),如下所示(注意您必須使用sudo
):
須藤 ss -t -p
State Recv-Q Send-Q 本地地址:端口對端地址:端口進程 ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https 用戶:(("firefox",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 用戶:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
這向我們表明,SSH 守護進程和 Firefox 正在使用 TCP 套接字上已建立的兩個連接。
一個當之無愧的繼任者
ss
命令提供的信息與之前由netstat
提供的信息相同,但以更簡單、更易於訪問的方式提供。 您可以查看手冊頁以獲取更多選項和提示。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦