如何在 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 端口。例如,以下带有 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 命令来查找开放的网络端口。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

