ss命令

ss(Socket Statistics)命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。

ss的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag,tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

语法

 ss [ OPTIONS ]
 ss [ OPTIONS ] [ FILTER ]

  # FILTER选项
  FILTER := [ state STATE-FILTER ] [ EXPRESSION ]

  STATE-FILTER := {TCP-STATES|all|connected|synchronized|bucket|big}

  #STATE-FILTER 各项可选值
    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}

  #EXPRESSION可选值
  [dst|src|dport|sport]

常用选项:

  • -t, –tcp 显示 TCP 协议的 sockets
  • -u, –udp 显示 UDP 协议的 sockets
  • -x, –unix 显示 unix domain sockets,与 -f 选项相同
  • -n, –numeric 不解析服务的名称(默认不解析),如 “22” 端口不会显示成 “ssh”
  • -r, –resolve 把 IP 解释为域名,把端口号解释为协议名称
  • -l, –listening 只显示处于监听状态的端口
  • -p, –processes 显示监听端口的进程(Ubuntu 上需要 sudo)
  • -a, –all 显示所有连接
  • -4, --ipv4 只显示IPv4的连接
  • -6, --ipv6 只显示IPv6的连接

FILTER说明:

STATE-FILTER:

  • TCP-STATES tcp各状态,
  • connected,synchronized,bucket,bucket,big 是TCP-STATES的部分状态的组合

EXPRESSION:

  • dst 目标主机IP
  • src 本地IP
  • dport 目标主机端口
  • sport 本地端口

示例:

$ ss -t

State       Recv-Q Send-Q                   Local Address:Port                        Peer Address:Port 
ESTAB       0      0                         10.16.200.90:45906                      10.16.200.90:22122 
ESTAB       0      0                            127.0.0.1:32001                         127.0.0.1:31001
ESTAB       0      0                            127.0.0.1:58627                          127.0.0.1:epmd
ESTAB       0      0                         10.16.200.90:22122                      10.16.200.90:45906 
SYN-SENT    0      1                         10.16.200.90:37602                   10.18.200.91:microsan
ESTAB       0      0                  ::ffff:10.16.200.90:mysql                ::ffff:10.16.7.179:56881 

......

查tcp协议, -a对TCP协议来说,既包含监听的端口,也包含建立的连接

$ ss -tan

State      Recv-Q Send-Q      Local Address:Port                     Peer Address:Port
LISTEN     0      128                     *:22122                    *:*                  
LISTEN     0      128                     *:22                       *:*                  
LISTEN     0      128                     *:23000                    *:*                  
LISTEN     0      128                     *:15672                    *:*                  
LISTEN     0      100             127.0.0.1:25                       *:*                  
LISTEN     0      1               127.0.0.1:32001                    *:*                  
LISTEN     0      128                     *:25672                    *:*                  
ESTAB      0      0            10.16.200.90:45906                    10.16.200.90:22122
TIME-WAIT  0      0            10.16.200.90:51780                    10.16.200.90:22122
ESTAB      0      0               127.0.0.1:32001                       127.0.0.1:31001
TIME-WAIT  0      0            10.16.200.90:51758                    10.16.200.90:22122
ESTAB      0      0               127.0.0.1:58627                       127.0.0.1:4369
ESTAB      0      0            10.16.200.90:22122                    10.16.200.90:45906
ESTAB      0      0            10.16.200.90:23000                    10.16.200.97:36808
TIME-WAIT  0      0            10.16.200.90:51810                    10.16.200.90:22122
......

也可结合grep命令输出过滤结果,如: sudo ss -tlp | grep ssh

dst/src dport/sport 过滤

可以通过 dst/src/dport/sprot 语法来过滤连接的来源和目标的地址或端口

匹配本地地址和端口号,示例:

$ ss src 10.16.200.6
$ ss src 10.16.200.6:http
$ ss src 10.16.200.6:80

匹配远程地址和端口号,示例:

$ ss dst 10.16.200.90
$ ss dst 10.16.200.90:443
$ ss dst 10.16.200.90:http

端口号的过滤可以使用一些比较符,语法如下:

ss [sport | dport] [OP] port

OP表示比较符,如下表:

符号实体符比较运算
<=le小于等于
<lt小于
>=ge大于等于
>gt大于
!=ne不等于

如果使用>,<原始符号需要使用\转义, 如>

查看本地端口大于3306的tcp连接:

$ ss -tln sport gt 3306
State       Recv-Q Send-Q        Local Address:Port              Peer Address:Port
LISTEN      0      128                      *:22122                 *:*
LISTEN      0      128                       *:8880                 *:*
LISTEN      0      128                       *:4369                 *:*
LISTEN      0      128                      *:63796                 *:*
LISTEN      0      128                      *:23000                 *:*
LISTEN      0      128                      *:15672                 *:*
LISTEN      0      1                127.0.0.1:32001                 *:*
LISTEN      0      128                      *:25672                 *:*
LISTEN      0      128                      :::9998                 :::*
LISTEN      0      128                      :::8080                 :::*
LISTEN      0      50                      :::20880                 :::*
LISTEN      0      128                      :::8081                 :::*
LISTEN      0      128                      :::4369                 :::*
LISTEN      0      1          ::ffff:127.0.0.1:5010                 :::*

状态过滤 语法:

ss [ OPTIONS ] [ state FILTER ]

示例:

# 列出IPv4状态为connected选项包含的状态值的连接
$ ss -4 state connected
Netid State      Recv-Q Send-Q                 Local Address:Port                                  Peer Address:Port
tcp   ESTAB      0      0                       10.16.200.90:45906                                 10.16.200.90:22122
tcp   TIME-WAIT  0      0                       10.16.200.90:59038                                 10.16.200.90:22122
tcp   TIME-WAIT  0      0                       10.16.200.90:epmd                                  10.16.200.90:37635
tcp   SYN-SENT   0      1                       10.16.200.90:49214                                 10.18.200.91:dnp 
tcp   TIME-WAIT  0      0                       10.16.200.90:58978                                 10.16.200.90:22122
tcp   ESTAB      0      0                          127.0.0.1:32001                                    127.0.0.1:31001
tcp   ESTAB      0      0                          127.0.0.1:58627                                    127.0.0.1:epmd
...

# 列出IPv4状态为connected选项包含的状态值的且端口大于22122的连接
$ ss -4n state connected sport ge 22122
Netid State      Recv-Q Send-Q                   Local Address:Port                                  Peer Address:Port 
tcp   TIME-WAIT  0      0                         10.16.200.90:59666                                 10.16.200.90:22122
tcp   ESTAB      0      0                         10.16.200.90:45906                                 10.16.200.90:22122
tcp   ESTAB      0      0                            127.0.0.1:32001                                    127.0.0.1:31001
tcp   ESTAB      0      0                            127.0.0.1:58627                                    127.0.0.1:4369 
tcp   ESTAB      0      0                         10.16.200.90:22122                                 10.16.200.90:45906
tcp   ESTAB      0      0                         10.16.200.90:23000                                 10.16.200.97:36808
tcp   TIME-WAIT  0      0                         10.16.200.90:59748                                 10.16.200.90:22122
tcp   TIME-WAIT  0      0                         10.16.200.90:59786                                 10.16.200.90:22122
...




返回软件开发辅助网 | 常用命令列表

shell语法手册