如何列出 Linux 上的开放端口?
在网络中,端口是一个有趣的功能。这是网络流量识别目标应用程序或服务的一种方式。每个进程/服务都有其唯一的端口。端口始终与主机的 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 文件包含有关当前运行的服务的信息。这是一个很大的文件,所以准备好被淹没。
使用 netstat 列出开放端口
netstat 工具是一个用于显示 TCP 网络连接、路由表和各种网络接口的实用程序。它还提供网络协议统计信息。通过使用netstat,我们可以列出系统所有开放的端口。
运行以下 netstat 命令:
让我们快速细分一下在此命令中使用的所有标志。
a:告诉 netstat 显示所有套接字
t:告诉 netstat 列出 TCP 端口
u:告诉 netstat 列出 UDP 端口
这是 netstat 命令的另一种变体:
命令中使用了两个新标志。他们的意思是什么?
l:告诉 netstat 仅打印监听套接字
n:告诉 netstat 显示端口号
要显示正在使用端口的进程的 PID,请使用“-p”标志:
使用 ss 列出开放端口
ss 工具是用于调查套接字的实用程序。其用法与netstat类似。
要列出打开的端口,请运行以下 ss 命令:
这些标志与 netstat 类似。他们描述的功能也非常相似。
l:告诉 ss 显示监听套接字
n:告诉 ss 不要尝试解析服务名称
t:告诉 ss 显示 TCP 套接字
u:告诉 ss 显示 UDP 套接字
使用 lsof 列出开放端口
lsof 命令用于列出打开的文件。但是,它也可用于显示打开的端口。
运行以下 lsof 命令:
要获取特定协议(TCP、UDP 等)的开放端口,然后在“-i”标志后定义它,请使用:
使用 nmap 列出开放端口
nmap 工具是一款功能强大的网络探索和安全/端口扫描工具。它可以报告系统中所有开放的端口。
要列出打开的 TCP 端口,请运行以下 nmap 命令。这里,IP地址是主机的IP地址:
这里,命令参数有两个部分。
-sT:此部分告诉 nmap 扫描 TCP 端口。
-p- :这告诉 nmap 扫描所有 65535 端口。如果不使用,则 nmap 默认情况下将仅扫描 1000 个端口。
如果需要列出开放的 UDP 端口,请运行以下 nmap 命令:
要获取打开的 TCP 和 UDP 端口,请使用以下命令:
使用 netcat 列出开放端口
netcat 工具是一个命令行实用程序,用于通过 TCP 和 UDP 协议跨网络连接读取和写入数据。该工具还可用于列出开放端口。它可以对特定端口或一系列端口执行测试。
以下netcat命令将扫描从1到1000的端口。netcat命令默认对TCP协议执行扫描:
它还可以扩展到可能端口的整个列表:
让我们快速分析一下这些标志。
z:告诉 netcat 仅扫描开放端口而不发送任何数据
v:告诉 netcat 以详细模式运行
要从此列表中仅获取打开的端口,请使用 grep 过滤输出中的术语“succeeded”。
如果要对 UDP 协议执行扫描,请添加“-u”标志。
最后的想法
正如所示,有多种方法可以扫描 Linux 上的开放端口。我建议您先尝试所有方法,然后再决定掌握哪一种。如果您经常使用某种工具(例如 netcat 或 nmap),那么掌握相关方法将是最有益的。
快乐计算!