如何在 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** 包含有关正在运行的服务(当前)的详细信息。这是一个大文件。 ![]() 使用 netstat 列出开放端口**netstat** 工具可以被描述为一个用于显示网络连接、路由表、TCP 和多个网络接口的实用程序。此外,它还提供网络协议的统计信息。我们可以使用 netstat 工具列出系统上的所有开放端口。 我们可以执行以下命令 ![]() 让我们快速解释一下我们在上述命令中使用的每个标志的分解 **1. a:**此标志通知 netstat 显示每个套接字。 **2. t:**此标志通知 netstat 列出 TCP 端口。 **3. u:**此标志通知 netstat 列出 UDP 端口。 **netstat** 命令有另一个变体,如下所示 ![]() 上面命令中有两个新标志,解释如下 **1. l:**此标志通知 netstat 仅打印正在侦听的套接字。 **2. n:**此标志通知 netstat 显示端口号。 我们可以使用标志 **“-p”** 来显示使用任何端口的进程 PID。 ![]() 检查本地开放端口netstat 命令在每个计算机操作系统中都可用,用于监视网络连接。下面的命令使用 netstat 来显示 TCP 协议的每个正在侦听的端口 ![]() 让我们简要定义一下上述命令中的标志 **1. -l:**它列出正在侦听的端口。 **2. -t:**它指定 TCP 协议。 结果以列的形式很好地排序,显示协议、人类可读的发送和接收的数据包、端口状态、远程和本地 IP 地址。 如果我们修改 TCP 协议为 UDP 协议,那么输出将仅显示开放端口。由于与 TCP 协议的矛盾,结果将显示而未描述状态。 ![]() 我们可以忽略描述协议,仅使用 --listen 或 -l 选项来获取关于每个自由协议的侦听端口的详细信息 ![]() 上述选项将显示有关 Unix、UDP 和 TCP 套接字协议的详细信息。 上面的每个示例都展示了如何打印关于正在侦听的端口的详细信息,而无需授权连接。下面的命令展示了如何显示正在侦听的端口和授权的连接。 ![]() 其中 **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** 命令相同。 我们可以运行以下命令来列出开放端口 ![]() 上述标志与 **netstat** 命令相同。ss 工具描述的功能也基本相同。 **1. l:**此标志通知 ss 显示正在侦听的套接字。 **2. n:**此标志通知 ss 不要尝试推断服务名称。 **3. t:**此标志通知 ss 显示 TCP 套接字。 **4. u:**此标志通知 ss 显示 UDP 套接字。 使用 lsof 列出开放端口lsof 命令可用于列出打开的文件。但是,它也可以用来显示打开的端口。 我们可以执行以下命令 ![]() 要获取特定协议(UDP、TCP 等)的开放端口,请在使用 **“-i”** 标志后指定它,我们可以执行以下命令 使用 nmap 列出开放端口nmap 命令可以定义为一个强大的端口/安全扫描和网络探索工具。它还可以报告系统中每个开放的端口。 我们可以执行以下命令来列出开放的 TCP 端口。 ![]() 上面提到的命令有两个部分 **1. -sT:**它通知 nmap 工具扫描 **TCP** 端口。 **2. -p-:**它通知 nmap 工具扫描所有 **65535** 个端口。如果未使用,nmap 工具将默认仅扫描 **1000** 个端口。 如果我们想列出 UDP 的开放端口,那么我们可以执行以下命令 ![]() 我们也可以执行以下命令来获取 UDP 和 TCP 端口 ![]() 使用 netcat 列出开放端口netcat 工具可以被描述为一个命令行实用程序,用于通过 UDP 和 TCP 协议的网络连接进行读写数据。此外,它还可以用于列出开放端口。此工具可以对特定端口或一系列端口执行测试。 下面的 netcat 命令用于扫描 **1-1000** 范围的端口。默认情况下,它将通过 TCP 协议执行扫描 ![]() 此外,它还可以扩展到特定端口的整个列表 ![]() 让我们快速分解一下这些标志。 **1. z:**它通知 netcat 命令仅扫描开放端口,而不传输任何数据。 **2. v:**它通知 netcat 命令以详细模式运行。 我们可以使用 grep 过滤结果,以“succeeded”一词作为术语,仅通过此列表获取开放端口。 ![]() 如果我们想通过 UDP 协议执行扫描,那么我们可以包含 **“-u”** 标志。 下一个主题Linux vs Ubuntu |
我们请求您订阅我们的新闻通讯以获取最新更新。