如何列出 Linux 上的开放端口?如何列出 Linux 上的开放端口?如何列出 Linux 上的开放端口?如何列出 Linux 上的开放端口?
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何列出 Linux 上的开放端口?

发表 admin at 2025年2月28日
类别
  • 未分类
标签

在网络中,端口是一个有趣的功能。这是网络流量识别目标应用程序或服务的一种方式。每个进程/服务都有其唯一的端口。端口始终与主机的 IP 地址以及协议相关联。

这是我最喜欢用的一个比喻来描述端口是什么。想象一艘满载货物的船,将驶向遥远的陆地。需要哪些信息才能正确到达目的地?为了简单起见,假设它需要国家(IP 地址)和船舶将停靠的港口。

在本指南中,了解如何列出 Linux 上的开放端口。

Linux 上的端口

端口充当通信端点。它是一个 16 位数字(十进制 0 到 65535)。虽然范围很大,但为了便于使用,端口分为三类。每个类别都标记为端口值的范围:

  • 0 到 1023:这些是“众所周知”端口,也称为“系统”端口,为提供各种网络服务的系统进程保留。要与“众所周知”端口绑定,进程必须具有超级用户权限。

  • 1024 至 49151:这些是“注册”端口,也称为“用户”端口,由 IANA 指定用于特定服务。根据请求,进程可以访问它们。在大多数系统中,不需要任何超级用户权限即可使用这些端口。

  • 49152 至 65535: 这些是“动态”端口,也称为“专用”端口。这些端口无法向 IANA 注册。这些端口开放用于私有或定制服务,也可以自动分配为临时端口(IP 使用的短期端口)。

在 Linux 中,有多种方法可以检查开放端口。默认情况下,任何端口都将保持关闭状态,除非应用程序正在使用它。如果端口打开,则必须将其分配给服务/进程。

列出开放端口

识别哪些端口正在使用比识别哪些端口打开更容易。这就是为什么以下部分将介绍列出当前正在使用的所有端口的方法。在 Linux 中,有多种工具可用于完成该任务。它们中的大多数都内置在任何 Linux 发行版中。

了解当前打开的端口在各种情况下都非常有用。可以为特定应用程序配置专用端口。开放端口也可能是网络入侵的强烈迹象。

以下方法在 Ubuntu 20.04.1 LTS 上演示。

列出 /etc/services 中的协议和开放端口

/etc/services 文件包含有关当前运行的服务的信息。这是一个很大的文件,所以准备好被淹没。

$ cat /etc/services | less

使用 netstat 列出开放端口

netstat 工具是一个用于显示 TCP 网络连接、路由表和各种网络接口的实用程序。它还提供网络协议统计信息。通过使用netstat,我们可以列出系统所有开放的端口。

运行以下 netstat 命令:

$ netstat -atu

让我们快速细分一下在此命令中使用的所有标志。

  • a:告诉 netstat 显示所有套接字

  • t:告诉 netstat 列出 TCP 端口

  • u:告诉 netstat 列出 UDP 端口

这是 netstat 命令的另一种变体:

$ netstat -lntu

命令中使用了两个新标志。他们的意思是什么?

  • l:告诉 netstat 仅打印监听套接字

  • n:告诉 netstat 显示端口号

要显示正在使用端口的进程的 PID,请使用“-p”标志:

$ netstat -lntup

使用 ss 列出开放端口

ss 工具是用于调查套接字的实用程序。其用法与netstat类似。

要列出打开的端口,请运行以下 ss 命令:

$ ss -lntu

这些标志与 netstat 类似。他们描述的功能也非常相似。

  • l:告诉 ss 显示监听套接字

  • n:告诉 ss 不要尝试解析服务名称

  • t:告诉 ss 显示 TCP 套接字

  • u:告诉 ss 显示 UDP 套接字

使用 lsof 列出开放端口

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

运行以下 lsof 命令:

$ lsof -i

要获取特定协议(TCP、UDP 等)的开放端口,然后在“-i”标志后定义它,请使用:

$ lsof -i <protocol>

使用 nmap 列出开放端口

nmap 工具是一款功能强大的网络探索和安全/端口扫描工具。它可以报告系统中所有开放的端口。

要列出打开的 TCP 端口,请运行以下 nmap 命令。这里,IP地址是主机的IP地址:

$ sudo nmap -sT -p- localhost

这里,命令参数有两个部分。

  • -sT:此部分告诉 nmap 扫描 TCP 端口。

  • -p- :这告诉 nmap 扫描所有 65535 端口。如果不使用,则 nmap 默认情况下将仅扫描 1000 个端口。

如果需要列出开放的 UDP 端口,请运行以下 nmap 命令:

$ sudo nmap -sU -p- localhost

要获取打开的 TCP 和 UDP 端口,请使用以下命令:

$ sudo nmap -n -PN -sT -sU -p- localhost

使用 netcat 列出开放端口

netcat 工具是一个命令行实用程序,用于通过 TCP 和 UDP 协议跨网络连接读取和写入数据。该工具还可用于列出开放端口。它可以对特定端口或一系列端口执行测试。

以下netcat命令将扫描从1到1000的端口。netcat命令默认对TCP协议执行扫描:

$ nc -z -v localhost 1-1000

它还可以扩展到可能端口的整个列表:

$ nc -z -v localhost 1-65535

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

  • z:告诉 netcat 仅扫描开放端口而不发送任何数据

  • v:告诉 netcat 以详细模式运行

要从此列表中仅获取打开的端口,请使用 grep 过滤输出中的术语“succeeded”。

$ nc -z -v localhost 0-65535 2>&1 | grep succeeded

如果要对 UDP 协议执行扫描,请添加“-u”标志。

$ nc -z -v -u localhost 0-65535 2>&1 | grep succeeded

最后的想法

正如所示,有多种方法可以扫描 Linux 上的开放端口。我建议您先尝试所有方法,然后再决定掌握哪一种。如果您经常使用某种工具(例如 netcat 或 nmap),那么掌握相关方法将是最有益的。

快乐计算!

©2015-2025 Norria support@norria.com