「ss(8)」-

另一个调查套接字的实用程序

命令语法格式

ss [options] [ FILTER ]

命令描述

命令ss用于转储套接字的统计信息。它允许显示类似于netstat(8)的信息。它可以显示比其他工具更多的TCP和状态信息。

命令行选项

如果没有使用任何选项,则ss显示已建立连接的打开的非监听套接字列表(例如TCP/UNIX/UDP)。

-H, –no-header
抑制标题行。

-n, –numeric
不解析服务名。

-r, –resolve
不解析IP地址和端口号。

-a, –all
显示“监听”与“非监听”的套接字。对于TCP来说,“非监听”指的是已经建立的连接。

-l, –listening
只显示“监听”的套接字。默认情况下忽略该选项。

-o, –options
显示计时器的信息。

-e, –extended
显示套接字的详细信息。

-m, –memory
显示套接字的内存使用信息。

-i, –info
显示内部的TCP信息。

-K, –kill
试图强行关闭套接字。 此选项显示已成功关闭的套接字、以静默方式跳过内核不支持关闭的套接字。它仅支持IPv4和IPv6套接字。

-s, –summary
打印摘要统计。此选项不解析从各种源获取摘要的套接字列表。 当套接字的数量太大,以至于解析/proc/net/tcp很痛苦时,此选项很有用。

-p, –processes
显示正在使用套接字的进程。

-Z, –context
如同-p选项,还显示进程安全性上下文。

对于netlink(7)套接字,初时进程上下文显示如下:

  1. 如果有效的pid,则显示进程上下文。
  2. 如果destination是内核(pid = 0),则显示内核初始上下文。
  3. 如果内核或netlink用户已分配唯一标识符,则将上下文显示为“unavailable”。 这通常表示进程有多个netlink套接字处于活动状态。

-z, –contexts
与选项-Z一起,但也显示套接字上下文。 套接字上下文取自关联的inode,而不是内核持有的实际套接字上下文。 套接字通常用创建进程的上下文标记,但是所显示的上下文将反映应用的任何策略角色、类型、范围转换规则,因此是有用的参考。

-N NSNAME, –net=NSNAME
切换到指定的网络命名空间名称。

-A QUERY, –query=QUERY, –socket=QUERY
要转储的套接字表列表,以逗号分隔。支持标识符有:all,inet,tcp,udp,raw,unix,packet,netlink,unix_dgram,unix_stream,unix_seqpacket,packet_raw,packet_dgram。

-D FILE, –diag=FILE
不显示任何内容,只需在应用过滤器后,将有关TCP套接字的原始信息转储到FILE中。如果FILE是“-”,则使用标准输出。

-F FILE, –filter=FILE
从FILE中读取过滤器信息。文件FILE的每行都被解释为单个命令行选项。 如果FILE是“-”,则使用标准输入。

命令行参数

FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
有关过滤器的详细信息,请查看官方文档(或Debian中的iproute-doc软件包)。

“STATE-FILTER”允许构造任意状态集以匹配。 它的语法是关键字state和exclude的序列,后跟state的标识符。

所有标准的TCP状态: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以外,所有已连接的状态。
  • bucket – 被作为minisockets维护的状态。例如,“time-wait”和“syn-recv”。
  • big – 与bucket相反。

上面是可用的标识符。

指定网络协议和套接字类型

-f FAMILY, –family=FAMILY
显示类型为FAMILY的套接字。支持的FAMILY包括:unix, inet, inet6, link, netlink

-4, –ipv4
仅显示IPv4套接字。与-f inet相同。

-6, –ipv6
仅显示IPv6套接字。与-f inet6相同。

-0, –packet
显示PACKET套接字。与-f link相同。

-x, –unix
显示Unix域套接字。与-f unix相同。

-t, –tcp
显示TCP套接字

-u, –udp
显示UDP套接字

-d, –dccp
显示DCCP套接字

-w, –raw
显示RAW套接字

-S, –sctp
显示SCTP套接字

-b, –bpf
显示套接字BPF过滤器(仅允许管理员获取这些信息)。

其他选项

-h, –help
显示帮助信息和选项的摘要。

-V, –version
显示版本信息。

使用示例

显示所有的TCP套接字:

# ss -t -a

显示所有带有进程SELinux安全上下文的TCP套接字:

# ss -t -a -Z

显示所有的UDP套接字:

# ss -u -a

显示所有已经建立的ssh连接:

# ss -o state established ‘( dport = :ssh or sport = :ssh )’

找到所有连接到X服务的本地进程:

# ss -x src /tmp/.X11-unix/*

为我们的Apache显示所有到网络network 193.233.7/24,且状态为FIN-WAIT-1的TCP套接字,并它们的计时器:

# ss -o state fin-wait-1 ‘( sport = :http or sport = :https )’ dst 193.233.7/24

上面是一些常用的示例。

相关手册

ip(8), /usr/share/doc/iproute-doc/ss.html (package iproutedoc)

RFC 793 – https://tools.ietf.org/rfc/rfc793.txt (TCP states)

参考文献

  • man 8 ss, Version ss utility, iproute2-ss180608

更新日志

  • 08/03/2018 创建文章