ss

发布时间 2023-06-29 17:00:28作者: 心恩惠动

1、概述

是 Socket Statistics 的缩写,用来显示处于活动状态的套接字信息,iproute2 包附带的一个工具

它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快

当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢,此时应使用ss

 

2、语法,参数

ss [参数]
ss [参数] [过滤]

 

参数   说明 备注
-h --help 帮助信息  
-V --version 程序版本信息  
-n --numeric 不解析服务名称  
-r --resolve 解析主机名  
-a --all 显示所有监听的端口及建立的连接  
-l --listening 显示监听状态的端口  
-o --options 显示计时器信息  
-e --extended 显示详细的套接字(sockets)信息  
-m --memory 显示套接字(socket)的内存使用情况  
-p --processes 显示监听端口的进程  
-i --info 显示 TCP内部信息  
-s --summary 显示套接字(socket)使用概况  
-4 --ipv4 仅显示IPv4的套接字  
-6 --ipv6 仅显示IPv6的套接字  
-0 --packet 显示 PACKET 套接字  
-t --tcp 仅显示使用TCP协议的  
-u --udp 仅显示使用UDP协议的  
-d --dccp 仅显示使用DCCP协议的  
-w --raw 仅显示 RAW套接字(sockets)  
-x --unix 仅显示 Unix套接字(sockets)  
-f --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink  
-A --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]  
-D --diag=FILE 将原始TCP套接字(sockets)信息转储到文件  
-F --filter=FILE 从文件中都去过滤器信息  

 

3、每列含义

使用ss不加参数,默认输出所有建立的连接(不包含监听的端口),包括 tcp, udp, and unix socket 三种类型的连接

列名 含义
Netid 网络标识符
State 每个服务的连接状态
Recv-Q 接收socket(套接字)队列中的数据量,以字节为单位
Send-Q 发送socket(套接字)队列中的数据量,以字节为单位
Local Address:Port 运行本地的计算机地址及端口
Peer Address:Port 对端地址及端口

 

4、实例

按网络传输类型显示总体统计信息

[root@mysql ~]# ss -s
Total: 37360 (kernel 48199)
TCP:   21430 (estab 2, closed 21420, orphaned 5, synrecv 0, timewait 119/0), ports 0

Transport Total     IP        IPv6
*      48199     -         -        
RAW      0         0         0        
UDP      2         2         0        
TCP      10        6         4        
INET      12        8         4        
FRAG      0         0         0 
ss -tln 显示使用tcp协议监听的端口
ss -tlnp 显示使用tcp协议监听的端口及进程信息
ss -tan 显示使用tcp协议监听的端口及连接信息
ss -talnp 显示使用tcp协议监控的端口,进程和连接信息
ss  -tan|awk 'NR>1{++S[$1]}END{for (a in S) print a,S[a]}' 统计tcp连接状态及数量

 

5、匹配远程与本地地址和端口号

  • dst:过滤连接的目标地址
  • src:过滤连接的本地地址
  • dport:目标端口
  • sport:来源端口

实例

#匹配本地端口和端口号
ss src 192.168.157.166
ss src 192.168.157.166:22
ss src 192.168.157.166:ssh

#匹配远程地址和端口号
ss dst 192.168.157.33
ss dst 192.168.157.33:443
ss dst 192.168.157.33:http

 

6、将本地与远程端口和一个数进行比较

语法:
ss dport OP num
ss sport OP num

OP 可以代表以下任意一个

<= le 小于或等于某个端口号
>= ge 大于或等于某个端口号
== eq 等于某个端口号
!= ne 不等于某个端口号
> gt 大于某个端口号
< lt 小于某个端口号

实例

#显示来源端口小于50的端口号的内容
ss -tuln sport lt 50

#如果要用符号,则需要在符号前面加上转义符
ss -tuln sport \< 50

 

7、通过 TCP 的状态进行过滤

 支持的TCP状态:

established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listening
closing

connected      列出除了 listening 和 closing 之外的所有 TCP 状态
synchronized    列出除了 syn-sent 之外的所有 TCP 状态
bucket        列出 maintained 的状态,如:time-wait 和 syn-recv
big           列出和 bucket 相反的状态

实例

#显示所有状态为 established 的连接
ss state established

#过滤ipv4的地址
ss -4n state established

#显示所有状态为 Established 的 HTTP 连接
ss state established '( sport = :http or dport = :http )'
ss state established \( sport = :http or dport = :http \)

#所有连接到 22 端口的连接和对 22 端口的监听
ss state all dport = :22