如何在 Linux 中检查开放端口

17 Mar 2025 | 6 分钟阅读

简而言之,我们将描述计算机网络中的端口,然后我们将讨论如何在 Linux 中列出所有开放的端口。

端口可以在计算机网络和软件术语中定义为逻辑实体。

它充当通信端点,用于标识 Linux 操作系统 上给定的进程或应用程序。端口是一个 **16 位(0 到 65535)**数字,它区分了不同终端系统上一个应用程序与其他应用程序。

两个最著名的 Internet 传输协议,**用户数据报协议 (UDP)****传输控制协议 (TCP)** 以及其他协议,将端口号用于许多通信会话(目标和源端口号与目标和源 IP 地址结合使用)。

协议、端口和 IP 地址的组合,如 **TCP/UDP**,称为 **套接字。** 所有服务都必须有一个特定的套接字。

端口类别

为了方便使用,这些端口被分为三个类别,因为端口种类繁多。所有类别都被标记为端口值范围

**0-1023:**这些端口是 **知名** 的,称为 **“系统”** 端口。它们保留给提供大量网络服务的系统进程。进程必须拥有超级用户权限才能绑定到任何 **“知名”** 端口。

**1024-49151:**这些端口是 **“已注册”** 的,称为 **“用户”** 端口。它们由 **IANA** 指定用于唯一服务。根据请求,进程可能会获得访问它们的权限。在大多数系统情况下,使用这些端口不需要超级用户权限。

**49152-65535:**这些端口是 **“动态”** 的,称为 **“私有”** 端口。它们无法在 **IANA** 注册。这些类型的端口可以用于自定义和私有服务,也可能被自动分配为临时端口(也称为 **短暂** 端口,由 IP 使用)。

在 Linux 中检查开放端口的方法有很多。默认情况下,端口将关闭,除非有应用程序正在使用它。如果端口是开放的,则必须将其分配给一个进程或服务。

开放端口列表

了解哪个端口正在使用比了解哪个端口是开放的更容易。因此,下面的部分将提供列出当前正在使用的所有端口的方法。

Linux 中有几种用于此任务的工具。其中大多数都 **内置** 在 Linux 发行版中。

了解当前哪个端口是打开的,可能在许多场景中很有帮助。可以为特定的应用程序确定一个专用端口。开放端口可能是网络中入侵的有力迹象。

下面提到的方法是在 **Ubuntu 20.04 LTS** 上使用的。

使用 /etc/services 文件列出开放端口和协议

文件 **/etc/services** 包含有关正在运行的服务(当前)的详细信息。这是一个大文件。


How to check open ports in Linux

使用 netstat 列出开放端口

**netstat** 工具可以被描述为一个用于显示网络连接、路由表、TCP 和多个网络接口的实用程序。此外,它还提供网络协议的统计信息。我们可以使用 netstat 工具列出系统上的所有开放端口。

我们可以执行以下命令


How to check open ports in Linux

让我们快速解释一下我们在上述命令中使用的每个标志的分解

**1. a:**此标志通知 netstat 显示每个套接字。

**2. t:**此标志通知 netstat 列出 TCP 端口。

**3. u:**此标志通知 netstat 列出 UDP 端口。

**netstat** 命令有另一个变体,如下所示


How to check open ports in Linux

上面命令中有两个新标志,解释如下

**1. l:**此标志通知 netstat 仅打印正在侦听的套接字。

**2. n:**此标志通知 netstat 显示端口号。

我们可以使用标志 **“-p”** 来显示使用任何端口的进程 PID。


How to check open ports in Linux

检查本地开放端口

netstat 命令在每个计算机操作系统中都可用,用于监视网络连接。下面的命令使用 netstat 来显示 TCP 协议的每个正在侦听的端口


How to check open ports in Linux

让我们简要定义一下上述命令中的标志

**1. -l:**它列出正在侦听的端口。

**2. -t:**它指定 TCP 协议。

结果以列的形式很好地排序,显示协议、人类可读的发送和接收的数据包、端口状态、远程和本地 IP 地址。

如果我们修改 TCP 协议为 UDP 协议,那么输出将仅显示开放端口。由于与 TCP 协议的矛盾,结果将显示而未描述状态。


How to check open ports in Linux

我们可以忽略描述协议,仅使用 --listen 或 -l 选项来获取关于每个自由协议的侦听端口的详细信息


How to check open ports in Linux

上述选项将显示有关 Unix、UDP 和 TCP 套接字协议的详细信息。

上面的每个示例都展示了如何打印关于正在侦听的端口的详细信息,而无需授权连接。下面的命令展示了如何显示正在侦听的端口和授权的连接。


How to check open ports in Linux

其中

**1. -v:**用于详细输出。

**2. -a:**它显示活动连接。

**3. -t:**它显示 tcp 连接。

**4. -n:**它以数字形式显示端口。

假设我们发现系统中的一个可疑进程,并且我们希望检查与其相关的端口。我们可以使用 lsof 命令,该命令用于列出与进程相关的打开文件。

其中,

**1. -i:**它列出与 Internet 相关的打开文件, **6** 选项用于 **IPv6**, **4** 选项用于仅打印 **IPv4**。

**2. -a:**它指示结果被 **AND**。

**3. -p:**它指定我们希望检查的进程 PID 号。

使用 ss 列出开放端口

**ss** 工具可以指定为用于检查套接字。此工具的用法与 **netstat** 命令相同。

我们可以运行以下命令来列出开放端口


How to check open ports in Linux

上述标志与 **netstat** 命令相同。ss 工具描述的功能也基本相同。

**1. l:**此标志通知 ss 显示正在侦听的套接字。

**2. n:**此标志通知 ss 不要尝试推断服务名称。

**3. t:**此标志通知 ss 显示 TCP 套接字。

**4. u:**此标志通知 ss 显示 UDP 套接字。

使用 lsof 列出开放端口

lsof 命令可用于列出打开的文件。但是,它也可以用来显示打开的端口。

我们可以执行以下命令


How to check open ports in Linux

要获取特定协议(UDP、TCP 等)的开放端口,请在使用 **“-i”** 标志后指定它,我们可以执行以下命令

使用 nmap 列出开放端口

nmap 命令可以定义为一个强大的端口/安全扫描和网络探索工具。它还可以报告系统中每个开放的端口。

我们可以执行以下命令来列出开放的 TCP 端口。


How to check open ports in Linux

上面提到的命令有两个部分

**1. -sT:**它通知 nmap 工具扫描 **TCP** 端口。

**2. -p-:**它通知 nmap 工具扫描所有 **65535** 个端口。如果未使用,nmap 工具将默认仅扫描 **1000** 个端口。

如果我们想列出 UDP 的开放端口,那么我们可以执行以下命令


How to check open ports in Linux

我们也可以执行以下命令来获取 UDP 和 TCP 端口


How to check open ports in Linux

使用 netcat 列出开放端口

netcat 工具可以被描述为一个命令行实用程序,用于通过 UDP 和 TCP 协议的网络连接进行读写数据。此外,它还可以用于列出开放端口。此工具可以对特定端口或一系列端口执行测试。

下面的 netcat 命令用于扫描 **1-1000** 范围的端口。默认情况下,它将通过 TCP 协议执行扫描


How to check open ports in Linux

此外,它还可以扩展到特定端口的整个列表


How to check open ports in Linux

让我们快速分解一下这些标志。

**1. z:**它通知 netcat 命令仅扫描开放端口,而不传输任何数据。

**2. v:**它通知 netcat 命令以详细模式运行。

我们可以使用 grep 过滤结果,以“succeeded”一词作为术语,仅通过此列表获取开放端口。


How to check open ports in Linux

如果我们想通过 UDP 协议执行扫描,那么我们可以包含 **“-u”** 标志。


下一个主题Linux vs Ubuntu