🌝

Linux 命令:ss

Posted at — Mar 02, 2022

ss(Socket Statistics)1命令功能类似于 netstat,用于获取 socket 统计信息,比 netstat 能展示更多信息。

命令格式

ss [options] [ FILTER ]

选项

参数描述
-H, --no-header不打印头部标题行
-n, --numeric不解析域名
-r, --resolve解析域名
-a, --all显示正在监听和非监听(对于 TCP 来说是已建立的连接)的 socket
-l, --listening显示正在监听的 socket(默认不显示)
-p, --processessocket 对应的进程
-4, --ipv4只显示 ipv4 socket
-t, --tcp只显示 TCP socket
-u, --udp只显示 UDP socket
-x, --unix只显示 Unix 域套接字(Unix domain sockets)

过滤器

  1. 按 socket 状态过滤
1
2
ss state [ STATE-FILTER ] [ EXPRESSION ]
ss exclude [ STATE-FILTER ] [ EXPRESSION ]

TCP 状态有 LISTEN、SYN-SENT、SYN-RECEIVED、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、 TIME-WAIT、CLOSED2。STATE-FILTER 对应可选项有 all、connected、synchronized、bucket、big。

过滤表达式的写法可参考 ss 手册3

1
2
# Display all established ssh connections.
ss -o state established '( dport = :ssh or sport = :ssh )'
  1. 按地址/端口过滤
1
2
3
4
ss dst [ADDRESS_PATTERN]
ss src [ADDRESS_PATTERN]
ss dport [OP] [PORT]
ss sport [OP] [PORT] 
1
2
# sockets connected to port 22 on network 10.0.0.0...255.
ss dst 10.0.0.0/24:22

前面两种,状态过滤和地址过滤,可形成组合过滤:

1
2
# List all the tcp sockets in state FIN-WAIT-1 for our apache to network 193.233.7/24 and look at their timers.
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24

输出

ss 的输出格式包含六列1

描述
Netidsocket 类型和传输层协议,tcp,udp,raw,u_str(unix_stream)等
Statesocket 状态
Recv-Q网络接受队列4
Send-Q网络发送队列
Local Address:Port本地 socket
Peer Address:Port对端 socket
额外信息-o,-e,-p 开启