介绍

在这个实验中,你将学习如何在 Linux 系统中检查特定的网络套接字(socket)是否处于开放状态。掌握识别和检查活动网络套接字的方法,是进行网络故障排查和监控的一项基本技能。

通过实际操作练习,你将使用像 CODE0CODE1 这样强大的命令行工具来列出并过滤网络连接。你还将探索 CODE_2 文件系统,以更深入地了解套接字的详细信息,从而全面验证系统上网络套接字的状态。

使用 ss -tuln 检查套接字

在这一步中,你将学习如何使用 CODE_0 命令来检查 Linux 系统上的网络套接字(socket)。套接字是网络中数据收发的端点。了解如何查看活动的套接字对于网络故障排查和监控至关重要。

CODE_0 命令是一个用于检查套接字的强大工具。我们将使用以下选项:

如果终端尚未打开,请打开它。你可以在桌面左侧找到 Xfce 终端 图标。

现在,输入以下命令并按回车键:

ss -tuln

你将看到类似如下的输出:

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

让我们来分析一下输出内容:

此输出显示了系统上正在运行并监听连接的服务。例如,你可以看到 SSH(CODE0)、CUPS(CODE1)、VNC(CODE2)和邮件服务器CODE3)正在监听。

理解此输出是诊断网络连接问题或识别系统上可能存在的不必要服务的第一步。

点击 继续 进入下一步。

使用 netstat -tuln 验证套接字

在这一步中,你将使用另一个命令 CODE0 来验证网络套接字(socket)。与 CODE1 相比,CODE_2 是一个较旧的命令,但它仍然被广泛使用,并且能提供有关网络连接、路由表和接口统计信息等类似内容。

我们将使用与 CODE0 相同的选项来运行 CODE1,以查看监听的 TCP 和 UDP 套接字,且不解析服务名称:

在终端中输入以下命令并按回车键:

netstat -tuln

你将看到类似如下的输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

注意,CODE0 的输出与 CODE1 的输出非常相似。这两个命令都提供了有关协议(CODE2)、本地地址和端口(CODE3)、外部地址和端口(CODE4)以及连接状态(CODE5)的信息。

虽然在复杂场景下,CODE0 通常被认为速度更快且信息更丰富,但 CODE1 仍然是你 Linux 命令工具库中的一个有价值的工具。熟悉这两个命令是很好的做法。

你现在已经成功使用 CODE0CODE1 查看了监听套接字。这是了解系统网络活动的一项基本技能。

点击 继续 进入下一步。

检查 /proc/net 中的套接字详细信息

在这一步中,你将探索 CODE0 目录,该目录提供了有关 Linux 内核中网络栈和网络协议的详细信息。CODE1CODE_2 等命令的数据就来源于此。

CODE_0 文件系统是一个虚拟文件系统,它提供了有关进程和其他系统信息。这是检查内核内部状态的一种强大方式。

CODE0 目录中,你会找到包含网络连接原始数据的文件。例如,CODE1CODE2CODE3CODE_4 文件分别包含了活动的 TCP 和 UDP 套接字(分别对应 IPv4 和 IPv6)的信息。

让我们查看 CODE_0 文件的内容。在终端中输入以下命令并按回车键:

cat /proc/net/tcp

你将看到类似如下的输出:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (more lines)

这个输出不如 CODE0CODE1 的输出直观,因为它是内核的原始数据。每一行代表一个 TCP 套接字,包含多个字段,其中包括:

你还可以通过查看 CODE_0 文件来查看 UDP 套接字:

cat /proc/net/udp

对于 IPv6 套接字,你可以检查 CODE0CODE1 文件。

虽然在日常使用中你通常不会直接解析这些文件,但了解网络信息的来源可以让你更深入地了解 Linux 是如何管理网络连接的。像 CODE0CODE1 这样的命令本质上是读取并格式化这些文件中的数据,以便于理解。

你现在已经探索了 CODE_0 文件系统中可用的原始套接字信息。

点击 继续 完成实验。

总结

本次实验中,你学会了运用各种命令行工具,去检测Linux系统里特定网络套接字是否处于开放状态。首先,你使用了带有CODE0选项的CODE1命令,它能展示正在监听的TCP和UDP套接字,同时你还了解了输出列,像CODE2CODE3CODE4以及CODE5等。

一般来说,在使用了CODE0之后,你会接着使用CODE_1命令来验证套接字信息,这个命令能提供类似的网络统计数据。最后,你还探索了如何直接从CODE_2文件系统中检查详细的套接字信息,这能让你从更底层的角度来了解网络栈。通过这些步骤,你就能全面地识别和检查Linux系统上开放的网络套接字了。

本文转载于:https://labex.io/zh/tutorials/linux-how-to-check-if-a-specific-network-socket-is-open-in-linux-558761 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

联系方式: bd@zhengruan.com
网站备案号:苏ICP备2026018738号-1