ss(Socket Statistics)是一个套接字的统计工具,是另一个更有名的同类工具netstat的升级版。相比较下,ss具有更强的性能,更强大的功能。
ss的主要参数如下:
-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字
-l, --listening 显示监听状态的套接字
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字信息
-m, --memory 显示套接字的内存使用情况
-p, --processes 显示使用套接字的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字使用概况
-4, --ipv4 仅显示IPv4的套接字
-6, --ipv6 仅显示IPv6的套接字
-0, --packet 显示 PACKET 套接字
-t, --tcp 仅显示 TCP套接字
-u, --udp 仅显示 UCP套接字
-d, --dccp 仅显示 DCCP套接字
-w, --raw 仅显示 RAW套接字
-x, --unix 仅显示 Unix套接字
-f, --family=FAMILY 显示 FAMILY类型的套接字,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套接字信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
除了这些参数外,ss还提供了过滤器功能,根据某些条件来过滤而得到所需的套接字。
过滤的条件有三种,分别是:套接字的连接状态,套接字的协议族,ip地址和端口。
1. 接字的连接状态(仅TCP):
连状态分为十种:syn-sent (发送同步信号),syn-recv (接收同步信号),established (建立连接),fin-wait-{1,2} (等待1, 完成 2),time-wait(等待时间 ),closed(关闭),Close-wait(等待关闭),Last-ack (最后确认),listening(监听),closing(关闭 )。
下面是一个示例,显示所有已建立TCP连接的套接字:
[supreme@wallcrapper]$ ss -t state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 10.0.0.4:ssh 112.87.179.3:58340 0 64 10.0.0.4:ssh 112.87.179.3:57823
2. 套接字的地址族
地址族的类型有:
inet(ipv4协议地址),inet6(ipv6协议地址),unix(本地通信地址),netlink(用户进程和内核进程的IPC地址),vsock(虚拟机和本地主机通信的地址)
3. 套接字的ip地址和端口
ss使用dst匹配目的地址,
1 [supreme@wallcrapper ~]$ ss dst 222.186.190.17 2 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port 3 tcp ESTAB 0 1280 10.0.0.4:ssh 222.186.190.17:54654
使用src匹配源地址
1 [supreme@wallcrapper ~]$ ss src 10.0.0.4 2 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port 3 tcp ESTAB 0 64 10.0.0.4:ssh 112.87.179.3:62073 4 tcp FIN-WAIT-1 0 129 10.0.0.4:ssh 222.186.190.17:12070 5 tcp ESTAB 0 0 10.0.0.4:ssh 222.186.175.154:23006 6 tcp ESTAB 0 1280 10.0.0.4:ssh 222.186.190.17:2
若还要匹配套接字,直接在ip地址后附加即可。
若要单独匹配套接字,可使用sport匹配源端口,dport匹配目的端口
使用端口号匹配套接字的形式为:ss sport OP port 或 ss dport OP port
OP可以是下面之一:
>= | ge | 大于或等于某个端口号 |
== | eq | 等于某个端口号 |
!= | ne | 不等于某个端口号 |
> | gt | 大于某个端口号 |
< | lt | 小于某个端口号 |
注意当使用尖括号时,需要将其转义,如:
[supreme@wallcrapper ~]$ ss -t dport \<= 65535 State Recv-Q Send-Q Local Address:Port Peer Address:Port FIN-WAIT-1 0 1281 10.0.0.4:ssh 222.186.190.17:36190 ESTAB 0 0 10.0.0.4:ssh 222.186.190.17:41101 ESTAB 0 1280 10.0.0.4:ssh 222.186.190.17:43210 ESTAB 0 64 10.0.0.4:ssh 112.87.179.3:62073 ESTAB 0 1280 10.0.0.4:ssh 222.186.175.155:23
还可以使用复杂的过滤器表达式来过滤,过滤表达式由()包裹,且()需要被转义或者被引号包裹
1 [supreme@wallcrapper ~]$ ss state established '( sport = :ssh or dport = :ssh )' 2 Netid Recv-Q Send-Q Local Address:Port Peer Address:Port 3 tcp 0 0 10.0.0.4:ssh 222.186.190.17:17021 4 tcp 0 64 10.0.0.4:ssh 112.87.179.3:62073 5 tcp 0 1280 10.0.0.4:ssh 218.92.0.154:34413