如何使用 ss 在 Linux 上监控网络连接

在排除故障和修复网络问题时,Linux 实用程序是服务器管理员的救星。以前,管理员在 Linux 上使用 netstat 命令查看网络统计信息和其他与套接字相关的信息。但是这个命令现在已被弃用,以获得更好的工具。

ss 命令取代了 netstat,因为它提供了比其前身更详细的信息。本文将演示如何使用 ss 从系统中提取与套接字相关的信息。

什么是 ss 命令?

ss 命令是套接字统计信息的缩写,是一个 Linux 实用程序,它以详细且人类可读的格式显示与网络连接相关的信息。您可以使用 ss 对网络进行故障排除和查找问题,因为它提供了有关连接的完整详细信息。

如前所述,ss 取代了 netstat,后者是用于在 Linux 上列出套接字统计信息的原始实用程序。 ss 命令易于使用,提供更多信息,并提供快速准确的结果。

如何在 Linux 上使用 ss

使用 ss,您可以列出系统上的所有套接字连接。此外,还可以根据类型、目标地址和端口号过滤连接。

基本语法

ss 命令的基本语法是:

 ss options

…其中options是可用于调用命令函数的标志。

最简单的 ss 命令显示所有已建立连接的列表,而不管连接类型如何。

 ss

输出:

请注意,在上图中, State列仅包含一个值,即 ESTAB,它表示已建立的连接。

您将在输出中找到以下列标题:

  • Netid :这表示用于连接的套接字类型。可能的值为 TCP、UDP、u_seq(Unix 序列)和 u_str(Unix 字符串)。
  • 状态:状态列显示连接的状态。您会发现 ESTAB、UNCONN 和 LISTEN 等值,它们分别代表已建立、未连接和正在监听。
  • Recv-Q :队列中接收到的数据包数量。
  • Send-Q :队列中发送的数据包数量。
  • 本地地址和端口:用户机器的本地地址和端口号。
  • Peer address and port :目的机器地址和端口号。

获取所有套接字的列表

使用-a标志显示网络中存在的所有套接字,侦听或非侦听。

 ss -a

输出:

列出所有当前侦听套接字

要仅检索与当前正在侦听的套接字相关的信息,请在命令中使用-l标志。 -l代表Listening

 ss -l

Ss 将显示您的设备或网络上的所有活动侦听套接字。请注意,输出中的几乎每个套接字都有未连接状态。

一旦侦听套接字获得传入连接,它就会创建一个子套接字并使用它来建立连接。然后,您可以使用Linux tcpdump 实用程序来监视和过滤网络上的数据包。

显示 TCP、UDP 和 Unix 连接

在 Linux 上,有各种类型的套接字,包括 TCP、UDP 和 Unix 套接字。您可以使用 ss 列出属于特定套接字类型的所有连接。

要列出计算机上的每个 TCP 套接字:

 ss -t

输出:

-u标志将显示所有 UDP 套接字的列表:

 ss -u

输出:

要使用 ss 检索 Unix 套接字列表,请使用-x标志:

 ss -x

输出:

默认情况下, ss 只显示连接的套接字。要获取所有套接字的列表,无论连接状态如何,请在命令中使用-a标志:

 ss -ta
ss -ua
ss -xa

使用状态过滤 TCP 连接

TCP 套接字具有多种状态,可用于过滤结果。您可以使用以下套接字状态来过滤与 ss 的连接:已建立、已关闭、正在监听、正在关闭、所有、已连接、已同步、存储桶、大、时间等待等。

使用连接状态过滤 TCP 连接的基本格式是:

 ss -t state filter

…其中过滤器是连接的状态,例如,已建立。

相关: 常见的家庭网络术语及其含义

列出 IPv4 和 IPv6 连接

您可以使用-4-6标志来获取设备上的 IPv4 和 IPv6 套接字列表:

 ss -4
ss -6

输出:

您还可以使用 state 方法来过滤 IPv4 和 IPv6 套接字。

 ss -4 state established
ss -6 state established

使用端口号过滤连接

您可以在 ss 命令中指定dportsport值以使用端口号和协议过滤连接。 dportsport选项分别代表目标端口源端口

要获取与具有源端口 39700 或目标端口https 的连接相关的信息:

 ss -ta '( dport = :https or sport = :39700)'

输出:

您还可以将 state 方法与端口过滤器结合使用以获得精确的结果:

 ss -ta state established '( dport = :https or sport = :https )'

使用 ss 列出原始套接字

您可以使用-w–raw标志在您的设备上显示原始套接字:

 ss -w
ss --raw

输出:

显示与特定设备的连接

使用 ss,您还可以显示具有特定目标地址的连接列表。

 ss dst ipaddress

…其中ipaddress是目标设备的地址。

例如:

显示连接的进程 ID

在对网络进行故障排除时,了解有问题的连接的进程 ID 会大有帮助。

要显示与 TCP 连接关联的 PID:

 ss -t -p

Ss 还显示建立连接的应用程序的名称。

此外,您可以使用ps 命令获取有关该过程的更多详细信息。

获取网络统计信息摘要

-s标志允许用户查看其网络或设备的总体摘要。摘要包括总连接数、套接字的数量和类型等。

 ss -s

输出:

了解更多: 为什么应该在 WSL 中使用 Linux 网络工具

将输出发送到文件

您还可以使用>输出运算符将 ss 命令的输出保存到文件中以供以后参考。

 ss > output.txt

输出:

用 grep 实现 ss

如果您想过滤 ss 提供的数据但似乎无法回忆命令的格式,您可以使用 ss 管道 grep 以获得所需的结果。

例如,要使用 ss 和 grep 获取所有已建立的 TCP 连接的列表:

 ss -t | grep ESTAB

输出:

在 Linux 上监控网络连接

在 Linux 上,一切都有一个命令。从创建文件到监控网络,您可以命名。但是,随着大量实用程序的出现,随之而来的是哪个是最好的问题。

除了计算机的软件方面,用户还应该非常了解其系统的硬件规格。有几个命令可供用户轻松提取与其系统和硬件相关的信息。