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

linuxopen sourceoperating system

在解释如何列出 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 端口。例如,以下带有 lntu 开关的 netstat 命令可以列出所有处于监听状态的 TCP 和 UDP 端口。

示例

$ netstat -lntu

选项 -l - 仅列出正在监听的套接字

选项 -n - 以数字形式显示端口号

选项 t - 列出 TCP 端口

选项 u - 列出 UDP 端口

输出

您将获得以下输出

[root@localhost /]# netstat -lntuActive 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 命令来查找开放的网络端口。


相关文章


有用资源