ss简介
ss命令可以用来统计套接字信息,它支持PACKET套接字、TCP套接字、UDP套接字、DCCP套接字、RAW套接字和Unix域套接字等等。它能像netstat命令那样输出统计信息,与其它工具相比,它支持更多的TCP状态。在查看TCP连接状态方面,ss命令比netstat命令运行更快,使用起来也很方便快捷。
ss具有如下特性:
- 能统计所有TCP套接字信息
- 能统计所有UDP套接字信息
- 能统计ssh/ftp/http/https等协议的连接信息
- 能按照TCP状态、IP地址和端口过滤信息
大多数Linux发行版都自带ss以及其它监视工具。熟悉这些工具将有助于我们了解系统的套接字状态,为我们发现潜在的性能问题提供有用参考。
ss应用举例
显示套接字统计信息
ss -s
样例输出:
Total: 108 (kernel 0)
TCP: 9 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 2/0), ports 0
Transport Total IP IPv6
* 0 - -
RAW 0 0 0
UDP 3 2 1
TCP 7 6 1
INET 10 8 2
FRAG 0 0 0
显示所有打开的端口
ss -l
样例输出:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 tcpdiag:kernel *
nl UNCONN 0 0 7:kernel *
nl UNCONN 0 0 9:kernel *
nl UNCONN 0 0 10:kernel *
nl UNCONN 0 0 11:kernel *
nl UNCONN 0 0 15:kernel *
nl UNCONN 0 0 15:397 *
nl UNCONN 0 0 15:-4117 *
nl UNCONN 0 0 15:408 *
nl UNCONN 0 0 15:-4116 *
如果想看到是哪些进程打开了这些端口,可以用如下命令:
ss -pl
显示所有TCP套接字
ss -t -a
样例输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:http *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.0.1:9181 *:*
LISTEN 0 50 127.0.0.1:3872 *:*
LISTEN 0 128 127.0.0.1:3081 *:*
LISTEN 0 128 :::ssh :::*
显示所有UDP套接字
ss -u -a
显示所有RAW套接字
ss -w -a
显示所有UNIX域套接字
ss -x -a
显示所有建立的SMTP连接
ss -o state established '( dport = :smtp or sport = :smtp )'
显示所有建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
列出所有处于FIN-WAIT-1状态的TCP套接字
ss -o state fin-wait-1 -t
ss相关问题
如何按照TCP状态过滤套接字
语法如下:
## tcp ipv4 ##
ss -4 state tcp-state
## tcp ipv6 ##
ss -6 state tcp-state
上述命令中的tcp-state可以有如下取值:
- established
- syn-sent
- syn-recv
- fin-wait-1
- fin-wait-2
- time-wait
- closed
- close-wait
- last-ack
- listen
- closing
- all:上面所有状态
- connected:除了listen和closed之外的所有状态
- synchronized:除了syn-sent之外的所有connected状态
- bucket:miniSockets维护的状态,也就是time-wait和syn-recv
- big:与bucket状态相反
如何匹配远程地址和端口
语法如下:
ss dst address_pattern
## examples ##
ss dst 192.168.1.5
ss dst 192.168.1.5:http
ss dst 192.168.1.5:80
如何匹配本地地址和端口
语法如下:
ss src address_pattern
## examples ##
ss src 8.8.8.8
ss src 8.8.8.8:http
ss src 8.8.8.8:80
如何将本地或者远程端口和一个数作比较
语法如下:
## 比较远程端口 ##
ss dport OP port_number
## 比较本地端口 ##
ss sport OP port_number
其中,OP比较操作如下:
- <= 或 le
- >= 或 ge
- == 或 eq
- != 或 ne
- < 或 lt
- > 或 gt
几个例子:
## 别忘了转义特殊字符 ##
ss sport == :http
ss dport == :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss -o state connected sport == :http
ss \( sport = :http or sport == :https \)
ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24