Linux系統使用ss命令查看端口狀態
2.ss幫助
2.1 選項分類說明
2.2 過濾選項family
2.3 過濾選項state
2.4 狀態之間的關系
3.ss的使用
3.1 使用示例
3.2 過濾
3.2.1 狀態過濾
3.2.2 通過family過濾
3.2.3 使用地址和端口過濾
3.3 常用組合
1.可用工具
- 逐漸淘汰的 netstat 命令在 net-tools 軟件包里(多年沒有維護;效率很低)
- 逐漸成為主流的 ss 命令在 iproute2 軟件包里(對常用網絡命令做了改進和優化)
ArchLinux已棄用"net-tools",轉而使用"iproute2"
棄用命令 > 替換命令
arp > ip n
ifconfig > ip a, ip link, ip -s
netstat > ss, ip route, ip -s link
route > ip route
詳見:https://www.cnblogs.com/sztom/articles/10764994.html
不推薦使用的Linux網絡命令及其替代品
2.ss幫助
$ ss -h
-h, --help this message 幫助信息
-V, --version output version information 輸出版本信息
-n, --numeric don't resolve service names 不解析服務名稱
-r, --resolve resolve host names 解析主機名
-a, --all display all sockets 顯示所有套接字
-l, --listening display listening sockets 顯示偵聽套接字
-o, --options show timer information 顯示計時器信息
-e, --extended show detailed socket information 顯示詳細的套接字信息
-m, --memory show socket memory usage 顯示套接字內存使用量
-p, --processes show process using socket 顯示使用socket的進程信息
-i, --info show internal TCP information 顯示內部TCP信息
--tipcinfo show internal tipc socket information 顯示內部tipc套接字信息
-s, --summary show socket usage summary show socket使用摘要
--tos show tos and priority information 顯示tos和優先級信息
-b, --bpf show bpf filter socket information 顯示bpf過濾器套接字信息
-E, --events continually display sockets as they are destroyed 在它們被摧毀時不斷顯示套接字
-Z, --context display process SELinux security contexts 顯示進程SELinux安全上下文
-z, --contexts display process and socket SELinux security contexts 顯示進程和套接字SELinux安全上下文
-N, --net switch to the specified network namespace name 切換到指定的網絡命名空間名稱
-4, --ipv4 display only IP version 4 sockets 只顯示ipv4的套接字;
-6, --ipv6 display only IP version 6 sockets 只顯示ipv6的套接字;
-0, --packet display PACKET sockets 顯示PACKET套接字
-t, --tcp display only TCP sockets 僅顯示TCP套接字
-S, --sctp display only SCTP sockets 僅顯示SCTP套接字
-u, --udp display only UDP sockets 僅顯示UDP套接字
-d, --dccp display only DCCP sockets 僅顯示DCCP套接字
-w, --raw display only RAW sockets 僅顯示RAW套接字
-x, --unix display only Unix domain sockets 僅顯示Unix域套接字
--tipc display only TIPC sockets 僅顯示TIPC套接字
--vsock display only vsock sockets 僅顯示vsock套接字
-f, --family=FAMILY display sockets of type FAMILY 顯示FAMILY類型的套接字
FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|help}
-K, --kill forcibly close sockets, display what was closed 強行關閉套接字,顯示已關閉的內容
-H, --no-header Suppress header line 抑制標題行
-A, --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_tipc}[,QUERY]
-D, --diag=FILE Dump raw information about TCP sockets to FILE 將有關TCP套接字的原始信息轉儲到FILE
-F, --filter=FILE read filter information from FILE 從FILE中讀取過濾器信息
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}
2.1 選項分類說明
這2個選項(-n, -r)不能同時使用
-n, --numeric don't resolve service names 不解析服務名稱
-r, --resolve resolve host names 解析主機名
統計摘要
-s, --summary show socket usage summary show socket使用摘要
顯示全部
-a, --all display all sockets 顯示所有套接字
僅顯示部分
-l, --listening display listening sockets 顯示偵聽套接字
-4, --ipv4 display only IP version 4 sockets 只顯示ipv4的套接字;
-6, --ipv6 display only IP version 6 sockets 只顯示ipv6的套接字;
-0, --packet display PACKET sockets 顯示PACKET套接字
-t, --tcp display only TCP sockets 僅顯示TCP套接字
-S, --sctp display only SCTP sockets 僅顯示SCTP套接字
-u, --udp display only UDP sockets 僅顯示UDP套接字
-d, --dccp display only DCCP sockets 僅顯示DCCP套接字
-w, --raw display only RAW sockets 僅顯示RAW套接字
-x, --unix display only Unix domain sockets 僅顯示Unix域套接字
其他更多信息
-p, --processes show process using socket 顯示使用socket的進程信息
-o, --options show timer information 顯示計時器信息
-e, --extended show detailed socket information 顯示詳細的套接字信息
-m, --memory show socket memory usage 顯示套接字內存使用量
-i, --info show internal TCP information 顯示內部TCP信息
2.2 過濾選項 family
-f, --family=FAMILY display sockets of type FAMILY 顯示FAMILY類型的套接字
FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|help}
2.3 過濾選項 state
state : {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}
2.4 狀態之間的關系
詳細內容請看原文:https://blog.51cto.com/net881004/2164020
圖1:客戶端和服務器建立連接的揮手過程原理圖
圖2:TCP狀態轉移圖
圖3:關閉部分的狀態轉移圖
3. ss的使用
如果不添加選項 ss 命令默認輸出所有建立的連接(不包含監聽的端口),包括 tcp, udp, and unix socket 三種類型的連接:
$ ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:38885 60.227.167.98:24932
tcp ESTAB 0 0 192.168.31.177:35846 89.42.31.211:polestar
tcp CLOSE-WAIT 32 0 127.0.0.1:59638 127.0.0.1:socks
tcp CLOSE-WAIT 1 0 127.0.0.1:59612 127.0.0.1:socks
tcp FIN-WAIT-2 0 0 127.0.0.1:socks 127.0.0.1:59606
tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar
3.1 使用示例
顯示每個協議的摘要統計信息。
$ ss -s
Total: 916
TCP: 75 (estab 15, closed 26, orphaned 4, timewait 18)
Transport Total IP IPv6
RAW 1 1 0
UDP 14 13 1
TCP 49 48 1
INET 64 62 2
FRAG 0 0 0
查看所有套接字: ss -a
$ ss |wc -l
901
$ ss -a |wc -l //898
State 1
CLOSE-WAIT 2
ESTAB 749
FIN-WAIT-2 2
LAST-ACK 1
LISTEN 32
TIME-WAIT 2
UNCONN 110
合計 結果 898
顯示偵聽套接字,列出所有打開的網絡連接端口, ss -l或 --listening
$ ss -l |wc -l //147
顯示數字地址,而不是嘗試確定符號主機,端口或用戶名(跳過DNS轉換)ss -n或--numeric
$ ss -n
顯示符號主機,端口或用戶名,而不是數字表示。Netstat默認執行此操作。ss -r或--resolve
$ ss -r
顯示進程ID(PID)和每個套接字所屬程序的名稱。
$ ss -p
包括與網絡計時器相關的信息。ss -o或--options
$ ss -o
顯示更高級別的細節。ss -e或--extended
$ ss -e
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar uid:1001 ino:3316553 sk:750 <->
tcp ESTAB 0 0 127.0.0.1:59570 127.0.0.1:socks timer:(keepalive,38sec,0) uid:1001 ino:3335889 sk:76a <->
3.2 過濾
3.2.1 狀態過濾
$ ss state syn-recv
有如下選項可用,后面的數字是本機當前按狀態查詢的行數 |wc -l
syn-sent 發送同步信號
syn-recv 接收同步信號
established 建立連接
fin-wait-{1,2} 等待 完成 2
time-wait 等待時間 2
closed 關閉 111
Close-wait 等待關閉 2
Last-ack 最后確認
listening 堅聽 32
closing 關閉 1
all : 所有以上10種狀態
connected : 除了 listening and closed 的剩所有狀態(8種狀態)
synchronized :所有 connected 除了 syn-sent (7種狀態)
bucket : 顯示狀態為maintained as minisockets,如:time-wait和syn-recv.(2種狀態)
big : 和bucket相反.(8種狀態)
$ ss state all |wc -l
1036
$ ss state connected |wc -l
889
$ ss state synchronized |wc -l
904
$ ss state bucket |wc -l
18
$ ss state big |wc -l
1023
$ ss state listening |wc -l
34
3.2.2 通過family過濾
{inet|inet6|link|unix|netlink|vsock|tipc|help}
$ ss -f inet
$ ss -f inet |wc -l
33
$ ss -f link |wc -l
6
$ ss -f unix |wc -l
851
$ ss -f netlink |wc -l
62
$ ss -f vsock |wc -l
3.2.3 使用地址和端口過濾
可以通過 dst/src/dport/sprot 語法來過濾連接的來源和目標,來源端口和目標端口。
匹配本地地址和端口號
$ ss src 192.168.31.177
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:60412 89.42.31.211:polestar
tcp ESTAB 0 0 192.168.31.177:51972 58.250.136.56:http-alt
tcp LAST-ACK 0 1 192.168.31.177:57926 220.194.95.148:https
匹配遠程地址和端口號
$ ss dst 89.42.31.211
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:60476 89.42.31.211:polestar
tcp ESTAB 0 0 192.168.31.177:60452 89.42.31.211:polestar
$ ss dst 192.168.31.113:http
$ ss dst 192.168.31.113:80
端口過濾
$ ss dport OP PORT
$ ss sport OP PORT
操作符OP 可以代表以下任意一個:
<= le 小於或等於某個端口號
>= ge 大於或等於某個端口號
== eq 等於某個端口號
!= ne 不等於某個端口號
> gt 大於某個端口號
< lt 小於某個端口號
$ ss -tunl sport lt 50
$ ss -tunl sport \< 50
3.3 常用組合
查看主機監聽的端口,本地IP地址及tcp數字端口號(t:tcp; n:數字顯示;l監聽)
$ ss -tnl
顯示名稱,比如上面的127.0.0.1:53顯示為tigger:domain; 端口22顯示為ssh等。
$ ss -tlr
$ ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
LISTEN 0 5 0.0.0.0:8999 0.0.0.0:*
LISTEN 0 5 [::]:8999 [::]:*
$ ss -trl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 localhost:socks 0.0.0.0:*
LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:*
LISTEN 0 5 [::]:bctp [::]:*
加上p,顯示pid
$ ss -tlrp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 localhost:socks 0.0.0.0:* users:(("sslocal",pid=1123,fd=3))
LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:* users:(("qbittorrent",pid=618,fd=29))
LISTEN 0 5 [::]:bctp [::]:* users:(("qbittorrent",pid=618,fd=28))
所有的tcp連接
ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
LISTEN 0 5 0.0.0.0:8999 0.0.0.0:*
TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32874
TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32890
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32910
ESTAB 0 0 192.168.31.177:37342 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32898 127.0.0.1:1080
CLOSE-WAIT 0 0 192.168.31.177:57108 58.250.136.56:8080
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32894
ESTAB 0 0 192.168.31.177:37330 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32902
ESTAB 0 0 127.0.0.1:32894 127.0.0.1:1080
ESTAB 0 0 192.168.31.177:37334 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32906 127.0.0.1:1080
ESTAB 0 0 127.0.0.1:32910 127.0.0.1:1080
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32898
ESTAB 0 0 192.168.31.177:49443 60.227.167.98:24932
ESTAB 0 0 192.168.31.177:37346 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32906
ESTAB 0 0 192.168.31.177:37338 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32902 127.0.0.1:1080
LISTEN 0 5 [::]:8999 [::]:*
查看所有tcp,udp,數字顯示,顯示pid
$ ss -tuanp
查看所有tcp,udp,名稱顯示,顯示pid
$ ss -tuarp
其他命令:
'nc' means 'netcat', not 'netconsole'.
Install gnu-netcat and try again.
https://wiki.archlinux.org/index.php/Netconsole
https://wiki.archlinux.org/index.php/Network_tools#Netcat
https://en.wikipedia.org/wiki/Netcat
https://www.archlinux.org/packages/?name=socat