如何在 Linux 中查找开放端口?


在解释如何在 Linux 中列出所有开放网络端口之前,我们将简要讨论计算机网络中的端口。在计算机网络和软件术语中,端口是一个表示网络应用程序的逻辑实体。端口是一个用于通过数字识别网络服务的术语。

端口充当 Linux 操作系统的通信端点,以识别特定的进程或应用程序。端口是一个 16 位(0 到 65535)数字,用于区分一个正在运行的网络应用程序与其他应用程序。我们可以将这些端口号分为三类,

  • 知名端口 (0 到 1023)

  • 注册端口 (1024 到 49151)

  • 临时端口 (49152 到 65535)

知名端口

端口号 0 到 1023 用于标准 TCP/IP 服务器端应用程序,被称为知名端口。了解知名端口允许客户端应用程序识别对等服务器主机上的相应服务器应用程序进程。例如,端口 80 通常绑定到 HTTP 服务器应用程序,端口 443 绑定到 HTTPS。

注册端口

注册端口映射到特定服务,但不是知名端口的一部分。此类端口通常表示特定的服务器应用程序,并且通常为所有系统所接受。例如,MySQL 数据库服务器通常使用端口 3306

临时端口

与服务器网络应用程序一样,客户端网络程序也需要端口进行通信,以便服务器能够在该特定端口上回复客户端应用程序。临时端口是在运行时分配给客户端程序的动态端口,无需预先保留。

如何在您的机器上查找端口和关联的服务

Linux 中的 /etc/services 文件保存着服务及其对应端口的映射。您可以查看 /etc/services 以检查系统是否知道特定端口。以下命令将了解您的系统端口。

示例

$ cat /etc/services

输出

您将获得如下输出。

winrm 47001/tcp # Windows Remote Management Service jvl-mactalk 47100/udp # Configuration of motors conneced to industrial ethernet dbbrowse 47557/tcp # Databeam Corporation dbbrowse 47557/udp # Databeam Corporation directplaysrvr 47624/tcp # Direct Play Server directplaysrvr 47624/udp # Direct Play Server ap 47806/tcp # ALC Protocol ap 47806/udp # ALC Protocol bacnet 47808/tcp # Building Automation and Control Networks bacnet 47808/udp # Building Automation and Control Networks nimcontroller 48000/tcp # Nimbus Controller nimcontroller 48000/udp # Nimbus Controller nimspooler 48001/tcp # Nimbus Spooler nimspooler 48001/udp # Nimbus Spooler nimhub 48002/tcp # Nimbus Hub nimhub 48002/udp # Nimbus Hub nimgtw 48003/tcp # Nimbus Gateway nimgtw 48003/udp # Nimbus Gateway

查找 Linux 系统上的开放端口

有多种方法可以查找系统上的开放端口。

  • 使用 netstat 工具

  • 使用 ss 工具

  • 使用 lsof 命令

让我们逐一检查所有方法

使用 netstat 工具

netstat 是一个常用的命令,用于从系统中获取与网络相关的信息。要列出系统上的所有开放端口,我们可以使用 netstat 命令。端口可以是处于不同状态的 TCP 或 UDP 端口。例如,以下 netstat 命令与 lntu 开关一起使用可以列出所有 tcp 和 udp 端口,其中端口的状态为监听

示例

$ netstat -lntu

选项 –l − 它将仅列出监听套接字

选项 –n − 它将以数字形式显示端口号

选项 t − 它将列出 TCP 端口

选项 u − 它将列出 UDP 端口

输出

您将获得以下输出

[root@localhost /]# netstat -lntu
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:25   0.0.0.0:*    LISTEN

解码此命令的输出并不难。虽然第一列显示它是 TCP 端口还是 UDP 端口,但“本地地址”和“外部地址”列分别告诉我们服务器应用程序的 IP&端口和客户端应用程序的 IP&端口。

0.0.0.0:22 => 服务器在本地机器上运行,0.0.0.0 是分配给本地机器的所有 IP 的引用,22 是端口号

在监听状态下,“外部地址”不适用,因为任何客户端 (0.0.0.0) 使用任何临时端口 (*) 都可以连接到监听端口。

使用 SS 工具

它是另一个调查套接字的工具,是 netstat 命令的最佳替代方案。

它还将列出系统上的所有开放端口。

示例

$ ss  lntu

输出

[root@localhost /]# ss -lntu
Netid  State   Recv-Q  Send-Q  Local Address:Port
Peer Address:Port
udp    UNCONN    0   0      127.0.0.1:323
*:*
udp    UNCONN    0   0      [::1]:323
[::]:*
tcp    LISTEN    0   128    *:22
*:*
tcp    LISTEN    0   100    127.0.0.1:25
*:*
tcp    LISTEN    0   128    [::]:22
[::]:*
tcp    LISTEN    0   100    [::1]:25
[::]:*
[root@localhost /]#

使用 lsof 命令

让我们运行以下命令以使用 lsof 检查开放的 TCP 和 UDP 端口 −

lsof -i -P -n | grep LISTEN

-i − 查找列出端口

-P − 禁止将端口号转换为网络文件的端口名称。它可能会使 lsof 运行得更快一些。当端口名称查找无法正常工作时,它也很有用。

-n − 不使用 DNS 名称

| grep LISTEN − 再次仅使用 grep 命令作为过滤器显示 LISTEN 状态下的端口。

[root@localhost /]# lsof -i -P -n | grep LISTEN
sshd 997 root 3u IPv4 16531 0t0 TCP *:22 (LISTEN)
sshd 997 root 4u IPv6 16543 0t0 TCP *:22 (LISTEN)
master 1242 root 13u IPv4 17202 0t0 TCP 127.0.0.1:25 (LISTEN)
master 1242 root 14u IPv6 17203 0t0 TCP [::1]:25 (LISTEN)

结论

在 Linux 中,有多种列出开放端口的方法。我建议尝试前面提到的所有命令。Linux 专家通常使用 netstat 命令查找开放的网络端口。

更新于: 2022-11-21

835 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告