使用 Nmap 执行 UDP 端口扫描

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用 Nmap 进行 UDP(用户数据报协议)端口扫描,这是网络安全专业人员必备的一项重要技能。UDP 是一种无连接协议,在数据传输前不会建立专用的端到端连接。这使得它比 TCP 更快,但可靠性较低。

网络扫描在网络安全领域至关重要,它能让专业人员识别开放端口、正在运行的服务以及潜在的漏洞。Nmap 是一款功能强大的开源网络发现和安全审计工具,被系统管理员和网络安全专家广泛使用。在本次实验结束时,你将掌握如何设置 UDP 服务器、使用 Nmap 进行基本的 UDP 端口扫描以及解读扫描结果,这些对于网络探索和安全评估都非常重要。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 95.92%。获得了学习者 97.44% 的好评率。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") subgraph Lab Skills nmap/installation -.-> lab-415938{{"使用 Nmap 执行 UDP 端口扫描"}} nmap/save_output -.-> lab-415938{{"使用 Nmap 执行 UDP 端口扫描"}} nmap/port_scanning -.-> lab-415938{{"使用 Nmap 执行 UDP 端口扫描"}} nmap/udp_scanning -.-> lab-415938{{"使用 Nmap 执行 UDP 端口扫描"}} end

设置 UDP 服务器

在这一步中,你将设置一个 UDP 服务器。这个服务器将作为你 Nmap 扫描的目标。通过这样做,你将更好地理解 UDP 服务是如何运行的,以及扫描工具如何检测它们。

理解 UDP 协议

在开始设置服务器之前,让我们先花点时间了解一下什么是 UDP(用户数据报协议)。UDP 是互联网协议(IP)套件的重要组成部分。

  • UDP 是一种无连接协议。这意味着,与 TCP 不同,它在发送数据之前不会建立连接。使用 TCP 时,发送方和接收方之间首先会建立一个连接,但 UDP 会跳过这一步。
  • UDP 比 TCP 更快。由于它无需经历建立连接的过程,因此数据可以更快地发送。然而,这种速度是有代价的。UDP 比 TCP 可靠性低,因为无法保证数据会被送达、按正确顺序到达,或者不会有重复数据。
  • UDP 通常用于对速度的要求高于可靠性的应用程序。例如,视频和音乐等流媒体、在线游戏以及 DNS 查询都依赖于 UDP。在这些情况下,数据传输的小延迟比少量数据丢失更明显、更具破坏性。

设置 UDP 服务器

为了设置 UDP 服务器,我们将使用一个名为 netcat 的工具,它通常缩写为 ncnetcat 是一个非常有用的网络实用工具,允许你使用 TCP 或 UDP 读写网络连接。

  1. 首先,打开一个终端窗口。打开终端后,你需要导航到项目目录。这里是本次实验所有相关文件和配置所在的位置。你可以在终端中运行以下命令来实现:
cd /home/labex/project
  1. 现在,是时候启动 UDP 服务器了。我们希望服务器监听 9999 端口。你可以使用以下命令启动服务器:
nc -u -l -p 9999 -k

让我们来分析一下这个命令中每个选项的含义:

  • -u:此选项告诉 netcat 使用 UDP 而不是默认的 TCP。由于我们要设置一个 UDP 服务器,因此需要指定这个选项。
  • -l:这会让 netcat 进入监听模式。在监听模式下,netcat 充当服务器,等待传入的连接。
  • -p 9999:此选项指定服务器将监听的端口号。在这种情况下,我们选择了 9999 端口。
  • -k:此选项告诉服务器即使客户端断开连接也继续运行。这很有用,因为它允许服务器接受新连接,而无需每次客户端离开时都重新启动。

运行此命令后,你的终端可能看起来像是冻结或挂起了。这是正常现象。这意味着 netcat 现在正在 9999 端口上积极监听传入的 UDP 连接。

保持这个终端窗口打开,因为下一步我们还会用到它。要继续进行实验,你需要打开一个新的终端窗口。

执行基本的 Nmap UDP 扫描

在这一步中,我们将使用 Nmap 扫描你在上一步中设置的 UDP 服务器。这个过程至关重要,因为它将帮助你了解 Nmap 如何识别开放的 UDP 端口以及运行在这些端口上的服务。在这一步结束时,你将更好地掌握如何使用 Nmap 进行 UDP 扫描,这是网络安全领域的一项基本技能。

理解 Nmap UDP 扫描

Nmap 是 Network Mapper 的缩写,是一款著名的免费开源工具,用于网络发现和安全审计。在扫描 UDP 端口时,Nmap 的工作方式与 TCP 端口扫描有所不同。

UDP,即用户数据报协议,是一种无连接协议。与 TCP 在数据传输前建立连接不同,UDP 只是直接发送数据,无需先建立连接。这意味着用于 TCP 端口的传统基于连接的扫描方法对 UDP 不起作用。

当 Nmap 扫描 UDP 端口时,它会向目标端口发送空的 UDP 数据包,然后等待响应。如果端口关闭,目标系统通常会返回一个 ICMP“端口不可达”消息。然而,如果端口是开放的,情况就会变得复杂一些。可能根本没有响应,这使得很难判断端口是否真的开放。或者,如果端口上运行的 UDP 服务识别出数据包格式,它可能会发送响应。

需要注意的是,UDP 扫描通常比 TCP 扫描慢且可靠性低。这是因为 UDP 不像 TCP 那样具有内置的错误检查和重传机制。

执行 UDP 扫描

  1. 首先,打开一个新的终端窗口。确保保持运行 UDP 服务器的前一个终端窗口处于打开状态。这很重要,因为我们将扫描该终端中当前正在运行的 UDP 服务器。

  2. 接下来,我们需要导航到项目目录。在新终端中,运行以下命令:

cd /home/labex/project

此命令将当前工作目录更改为项目目录,我们所有相关的文件和配置都位于该目录中。

  1. 现在,是时候运行 Nmap UDP 扫描了。我们将扫描本地主机(127.0.0.1)的 9999 端口。运行以下命令:
sudo nmap -sU -p 9999 127.0.0.1 > /home/labex/project/udp_scan_results.txt

让我们分解这个命令,了解每个部分的作用:

  • sudo:用于以提升的权限运行命令。UDP 扫描需要这些提升的权限,因为它涉及在底层网络层发送数据包。
  • nmap:这是我们使用的扫描工具,是网络发现和安全审计操作的核心。
  • -sU:此选项告诉 Nmap 执行 UDP 扫描。
  • -p 9999:此选项指定我们只扫描 9999 端口。
  • 127.0.0.1:这是目标 IP 地址。在这种情况下,它是本地主机,意味着我们正在扫描自己的机器。
  • > /home/labex/project/udp_scan_results.txt:这部分将 Nmap 扫描的输出重定向到项目目录中名为 udp_scan_results.txt 的文件。这样,我们以后可以查看扫描结果。
  1. 扫描完成后,我们可以查看结果。运行以下命令:
cat /home/labex/project/udp_scan_results.txt

你应该会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-15 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000054s latency).

PORT     STATE         SERVICE
9999/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

理解扫描结果

让我们仔细查看扫描结果,了解它们的含义。

open|filtered 状态表示 Nmap 没有收到 ICMP“端口不可达”消息。对此有几种可能的解释:

  • 端口是开放的,并且 UDP 服务按预期运行。
  • 端口可能被防火墙过滤。防火墙可能会阻止 ICMP“端口不可达”消息或 UDP 流量本身。
  • 由于某些原因,目标系统可能没有发送 ICMP“端口不可达”消息。

在我们的例子中,由于我们自己设置了 UDP 服务器,我们知道端口是开放的。unknown 服务标签意味着 Nmap 根据其服务指纹识别无法确定该端口上运行的是什么服务。

如前所述,UDP 扫描不如 TCP 扫描那么确定。这就是为什么 Nmap 通常会为 UDP 端口显示 open|filtered 状态,使得准确确定 UDP 端口的状态更具挑战性。

总结

在本次实验中,你学习了如何使用 Nmap 进行 UDP 端口扫描,这是网络安全评估中的一项关键技能。首先,你使用 netcat 设置了一个 UDP 服务器,为扫描创建了一个实际的目标。然后,你对服务器监听的特定端口进行了基本的 Nmap UDP 扫描。

你还通过实践,了解了 UDP 协议及其与 TCP 的区别,学会了使用 netcat 设置基本的 UDP 服务器,掌握了使用 Nmap 扫描开放的 UDP 端口,并学会了解读 UDP 扫描结果。这些技能是进行更高级网络扫描和安全评估的基础。UDP 扫描至关重要,因为许多关键服务(如 DNS、DHCP 和流媒体协议)都使用 UDP。

在你网络安全学习的道路上,请记住,网络扫描只是全面安全评估的一部分。始终只扫描你拥有的系统或获得明确授权可以扫描的系统。