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
12-25 11:55