四种方法查看 Linux 中正在监听的端口

linuxoperating systemopen source更新于 2026/2/6 17:07:17

Linux 是一款流行的操作系统,被系统管理员、开发人员和其他技术爱好者广泛使用。管理 Linux 系统的重要任务之一是识别哪些端口正在使用以及哪些端口可用。在本文中,我们将讨论四种方法查看 Linux 中正在监听的端口。

使用 netstat 命令

netstat 命令是一个强大的工具,它提供有关网络连接、路由表和其他相关统计信息的详细信息。要检查哪些端口正在监听,您可以使用以下命令 -

$ netstat -ltn

此命令将显示系统当前正在监听的所有端口的列表。 "-l"选项指示 netstat 仅显示监听套接字,"-t"指定 TCP 连接,"-n"显示端口号而不是将其解析为名称。

以下是示例输出 -

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     

输出显示 SSH 守护进程正在监听端口 22,CUPS 打印服务正在监听端口 631。

使用 lsof 命令

lsof 命令("list open files"的缩写)是一个强大的工具,可用于列出 Linux 系统上所有打开的文件和网络连接。要找出哪些端口正在监听,可以使用以下命令 -

$ sudo lsof -i -P -n | grep LISTEN

此命令将显示系统上所有处于监听状态的打开网络连接列表。"-i"选项指定我们关注网络连接,"-P"告诉 lsof 使用端口号而不是服务名,"-n"禁用主机名解析。

以下是示例输出 -

sshd      2269     root    3u  IPv4  11758      0t0  TCP *:22 (LISTEN)
cupsd     2889     root    7u  IPv4  16314      0t0  TCP 127.0.0.1:631 (LISTEN)

输出显示 SSH 守护进程正在监听端口 22,CUPS 打印服务正在监听端口 631。

使用 ss 命令

ss 命令是 netstat 命令的现代替代品,提供类似的功能。要检查哪些端口正在监听,您可以使用以下命令 -

$ sudo ss -ltn

此命令将显示当前系统上正在监听的所有 TCP 端口列表。"-l"选项指示 ss 仅显示监听套接字,"-t"指定 TCP 连接,"-n"显示端口号而不是将其解析为名称。

以下是示例输出 -

State      Recv-Q Send-Q          Local Address:Port            Peer Address:Port
LISTEN     0      128                       *:22                     *:*
LISTEN     0      5                     127.0.0.1:631                    *:*

输出显示 SSH 守护进程正在监听端口 22,CUPS 打印服务正在监听端口 631。

使用 nmap 命令

nmap 命令是一个功能强大的工具,可用于网络探索、安全扫描和端口扫描。要检查远程系统上哪些端口正在监听,可以使用以下命令 -

$ sudo nmap -sS -p- <remote_ip>

此命令将对远程系统上的所有端口执行 TCP SYN 扫描,并报告哪些端口处于开放状态并正在监听。"-sS"选项指示 nmap 使用 SYN 扫描,这是一种隐秘的扫描技术,可以规避某些网络入侵检测系统。"-p-"选项指示 nmap 扫描系统上的所有 65535 个端口。

以下是示例输出 -

Starting Nmap 7.60 ( https://nmap.org ) at 2023-03-23 10:00 PDT
Nmap scan report for <remote_ip>
Host is up (0.035s latency).
Not shown: 65534 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
443/tcp  open   https

输出显示远程系统已打开并监听 22、80 和 443 端口。

使用 fuser 命令

fuser 命令是一个简单的实用程序,用于识别使用特定文件、目录或套接字的进程。要使用 fuser 命令检查哪些端口正在监听,请使用以下命令 -

$ sudo fuser -n tcp -v 1-65535

此命令将显示使用 TCP 端口 1 至 65535 的所有进程。让我们分解一下命令中使用的选项 -

-n tcp 指示 fuser 仅显示 TCP 连接

-v 指示 fuser 显示更详细的输出

fuser 命令的输出将显示使用 TCP 端口的进程列表及其各自的 PID。

使用 lshw 命令

lshw 命令是一个硬件信息实用程序,也可用于显示网络信息,包括开放端口。要使用 lshw 命令检查哪些端口正在监听,请使用以下命令 -

$ sudo lshw -class network -short

此命令将显示系统上的网络设备列表,以及它们各自的驱动程序和开放端口。

使用 iptables 命令

iptables 命令是一个功能强大的防火墙实用程序,可用于显示和操作防火墙规则,包括开放端口。要使用 iptables 命令检查哪些端口正在监听,请使用以下命令 -

$ sudo iptables -L -n

此命令将显示系统上当前的防火墙规则,包括允许通过防火墙的任何开放端口。

结论

对于系统管理员、开发人员和安全专业人员来说,识别 Linux 系统上哪些端口正在监听是一项重要任务。在本文中,我们讨论了四种查看 Linux 中正在监听的端口的方法:使用 netstat 命令、使用 lsof 命令、使用 ss 命令和使用 nmap 命令。每种方法都有各自的优缺点,您应该选择最符合您需求的方法。有了这些工具,您可以更好地管理您的 Linux 系统并确保其安全。


相关文章


有用资源