ss 命令可以用来获取 socket 信息,可以用来显示和 netstat 类似的信息,但 ss 能够显示更多 TCP 和状态的信息,包括 PACKET,TCP,UDP,DCCP,RAW,和 Unix domain sockes 等等。

通过 ss ,可以获取当前机器如何和外界通信非常详细的信息,包括网络连接信息,网络协议,Linux socket 连接状态等等。通过这些信息,可以非常轻松和方便的定位网络问题。当服务器 Socket 连接数量比较大时,netstat 可能就罢工了,这个时候 ss 还是能够应付的,ss 使用了 TCP 协议栈中的 tcp_diagtcp_diag 是一个用于分析统计的模块。

命令格式

ss [options] [ FILTER ]

当没有选项使用时,ss 会显示一组已经建立 open non-listening sockets (TCP/UNIX/UDP) 连接的 sockets。

选项

-h, --help	帮助信息
-V, --version	程序版本信息
-n, --numeric	不解析服务名称
-r, --resolve        解析主机名
-a, --all	显示所有套接字(sockets)
-l, --listening	显示监听状态的套接字(sockets)
-o, --options        显示计时器信息
-e, --extended       显示详细的套接字(sockets)信息
-m, --memory         显示套接字(socket)的内存使用情况
-p, --processes	显示使用套接字(socket)的进程
-i, --info	显示 TCP 内部信息
-s, --summary	显示套接字(socket)使用概况
-4, --ipv4           仅显示 IPv4 的套接字(sockets)
-6, --ipv6           仅显示 IPv6 的套接字(sockets)
-0, --packet	        显示 PACKET 套接字(socket)
-t, --tcp	仅显示 TCP 套接字(sockets)
-u, --udp	仅显示 UCP 套接字(sockets)
-d, --dccp	仅显示 DCCP 套接字(sockets)
-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   从文件中都去过滤器信息
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

使用实例

显示 TCP 连接,UDP 连接,Unix Sockets

ss -u -a
ss -t
ss -x

显示摘要信息

ss -s

列出当前的 established, closed, orphaned and waiting TCP sockets

查看进程使用的 socket

命令

ss -lp

说明:

  • -l 参数显示当前正在监听的 socket

在结果中可以过滤出端口占用的进程

ss -lp | grep 80

过滤 TCP 状态

ss 命令能够通过 TCP states 来过滤,状态列表

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

ss 命令能够识别的其他状态

  • all (all of the above states)
  • connected (all the states with the exception of listen and closed)
  • synchronized (all of the connected states with the exception of syn-sent)
  • bucket (states which are maintained as minisockets, for example time-wait and
  • syn-recv)
  • big (Opposite to bucket state)

对于 tcp ipv4

ss -4 state FILTER
ss -4 state listening

对于 ipv6

ss -6 state FILTER

显示所有状态为 established 的 SMTP 连接

ss -o state established '( dport = :smtp or sport = :smtp )'

显示所有状态为 Established 的 HTTP 连接

ss -o state established '( dport = :http or sport = :http )'

这里一定要注意引号中的写法,该有的空格一定要有。

显示特定目的地的连接

ss 另外一个非常便利的功能就是可以查看特定 IP 地址的连接情况,比如想要查看多少连接从 IP 192.168.1.130 连接到本机,则可以

ss dst 192.168.1.130

对于本地连接同理

ss src 192.168.1.200
ss src 192.168.1.200:80
ss src 192.168.1.200:http
ss src 192.168.1.200:smtp

reference