介绍
在本实验中,你将学习如何使用数据包跟踪和调试技术来排查 Nmap 扫描故障。本实验将指导你使用 --packet-trace 选项运行 Nmap 扫描以观察网络数据包,使用 -d2 启用调试级别 2,并结合跟踪和调试。
你还将学习如何使用 -oN 将跟踪输出保存到文件,并在 Xfce 终端中分析数据包详细信息以识别扫描问题。本实验使用 nmap --packet-trace 192.168.1.1、nmap -d2 127.0.0.1 和 nmap --packet-trace -oN trace.txt 127.0.0.1 等命令,提供诊断 Nmap 扫描问题的实践经验。
使用 nmap --packet-trace 192.168.1.1 运行带数据包跟踪的扫描
在本步骤中,我们将使用 Nmap 的 --packet-trace 选项来观察扫描期间发送和接收的数据包。这是一个强大的调试工具,可让你确切了解 Nmap 在网络层面的操作。
在开始之前,让我们简要讨论一下什么是数据包跟踪。数据包跟踪涉及捕获和分析网络数据包,以了解两个或多个设备之间的通信。Nmap 的 --packet-trace 选项提供了一种从 Nmap 内部直接查看这些数据包的简化方法。
要进行带数据包跟踪的扫描,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
执行 Nmap 命令:在终端中,输入以下命令并按回车键:
sudo nmap --packet-trace 192.168.1.1sudo:此命令需要 root 权限才能捕获网络数据包。nmap:这是命令行 Nmap 扫描器。--packet-trace:此选项告诉 Nmap 打印它发送和接收的数据包的跟踪信息。192.168.1.1:这是目标 IP 地址。如果此 IP 地址在你的网络中不可用,你可以将其替换为可从你的 LabEx VM 访问的设备的 IP 地址。一个常见的替代地址是127.0.0.1(localhost)。
观察输出:Nmap 现在将对目标 IP 地址进行扫描,并打印有关每个发送和接收的数据包的详细信息。输出将显示数据包的类型(例如,SYN、ACK)、源和目标 IP 地址及端口,以及其他相关信息。
输出将类似于以下内容(确切输出将根据你的网络和目标主机而有所不同):
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC SENT (0.0034s) to 192.168.1.1: TCP 192.168.1.100:54321 > 192.168.1.1:80 S ttl=64 id=12345 win=65535 RECV (0.0045s) from 192.168.1.1: TCP 192.168.1.1:80 > 192.168.1.100:54321 SA ttl=64 id=67890 win=14600 SENT (0.0045s) to 192.168.1.1: TCP 192.168.1.100:54321 > 192.168.1.1:80 A ttl=64 id=12346 win=65535 ... Nmap done: 1 IP address (1 host up) scanned in 0.123 seconds每行代表一个数据包。
SENT表示 Nmap 发送的数据包,RECV表示 Nmap 接收的数据包。SENT或RECV后面的信息描述了数据包的协议(TCP)、源和目标 IP 地址及端口、标志(S 表示 SYN,A 表示 ACK,SA 表示 SYN-ACK)、TTL(生存时间)、ID 和窗口大小。中断扫描:扫描将持续一段时间。你可以通过按
Ctrl+C中断它。
此步骤演示了如何使用 --packet-trace 选项来深入了解 Nmap 的网络活动。在接下来的步骤中,我们将探索其他调试选项和技术。
使用 nmap -d2 127.0.0.1 启用调试级别 2
在本步骤中,我们将在 Nmap 中启用调试级别 2。调试输出提供了有关 Nmap 内部操作的详细信息,这有助于理解 Nmap 的工作原理并排查问题。
Nmap 的调试级别从 1 到 9。级别越高,输出越详细。对于本步骤,我们将使用调试级别 2,它在详细程度和可读性之间取得了良好的平衡。
要启用调试级别 2,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
执行 Nmap 命令:在终端中,输入以下命令并按回车键:
sudo nmap -d2 127.0.0.1sudo:根据扫描类型,此命令可能需要 root 权限。nmap:这是命令行 Nmap 扫描器。-d2:此选项将调试级别设置为 2。127.0.0.1:这是目标 IP 地址,即回环地址(localhost)。
观察输出:Nmap 现在将对 localhost 进行扫描,并将调试信息打印到终端。输出将包括有关 Nmap 配置、它发送的探测以及它接收到的响应的详细信息。
输出将类似于以下内容(确切输出会有所不同):
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC --------------- Timing report --------------- hostgroups: min 1, max 1024 rtt-timeouts: init 1250, min 100, max 10000 max-scan-delay: 0 ms, brtt 1250 ms, rttvar 625 ms parallelism: min 1, max 256 --------------------------------------------- ... Nmap done: 1 IP address (1 host up) scanned in 0.123 seconds输出显示了 Nmap 在扫描期间做出的各种内部参数和决策。这种详细程度对于理解 Nmap 的操作方式和诊断问题很有用。
中断扫描:扫描将持续一段时间。你可以通过按
Ctrl+C中断它。
此步骤演示了如何在 Nmap 中启用调试级别 2。在下一个步骤中,我们将结合数据包跟踪和调试输出进行更详细的分析。
使用 nmap --packet-trace -d 192.168.1.1 结合跟踪与调试
在本步骤中,我们将结合使用 --packet-trace 和 -d 选项,以全面了解 Nmap 的操作。这将提供数据包级别的详细信息和内部调试信息,对于高级故障排除和理解 Nmap 的行为非常有用。
要结合数据包跟踪和调试,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
执行 Nmap 命令:在终端中,输入以下命令并按回车键:
sudo nmap --packet-trace -d 192.168.1.1sudo:此命令需要 root 权限才能捕获网络数据包。nmap:这是命令行 Nmap 扫描器。--packet-trace:此选项告诉 Nmap 打印它发送和接收的数据包的跟踪信息。-d:此选项启用调试输出。默认情况下,它将调试级别设置为 1。你可以使用-d2、-d3等增加调试级别。在这种情况下,我们使用的是默认级别 1。192.168.1.1:这是目标 IP 地址。如果此 IP 地址在你的网络中不可用,你可以将其替换为可从你的 LabEx VM 访问的设备的 IP 地址。一个常见的替代地址是127.0.0.1(localhost)。
观察输出:Nmap 现在将对目标 IP 地址进行扫描,并将数据包跟踪信息和调试信息都打印到终端。输出将是数据包详细信息(如步骤 1 中所示)和 Nmap 内部消息(如步骤 2 中所示)的混合。
输出将类似于以下内容(确切输出将根据你的网络和目标主机而有所不同):
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC SENT (0.0034s) to 192.168.1.1: TCP 192.168.1.100:54321 > 192.168.1.1:80 S ttl=64 id=12345 win=65535 RECV (0.0045s) from 192.168.1.1: TCP 192.168.1.1:80 > 192.168.1.100:54321 SA ttl=64 id=67890 win=14600 NSE: Using Lua engine for script processing. SENT (0.0045s) to 192.168.1.1: TCP 192.168.1.100:54321 > 192.168.1.1:80 A ttl=64 id=12346 win=65535 ... Nmap done: 1 IP address (1 host up) scanned in 0.123 seconds你将看到
SENT和RECV行与诸如NSE: Using Lua engine for script processing.之类的调试消息交错出现。中断扫描:扫描将持续一段时间。你可以通过按
Ctrl+C中断它。
此步骤演示了如何在 Nmap 中结合数据包跟踪和调试输出。这种组合为理解和排查 Nmap 扫描提供了一个强大的工具。
使用 nmap --packet-trace -oN trace.txt 127.0.0.1 保存跟踪输出
在本步骤中,我们将把数据包跟踪输出保存到一个文件中,以便后续分析。当你想要更仔细地检查数据包细节或与他人共享输出时,这会很有用。Nmap 提供了多种以不同格式保存扫描结果的选项。在这里,我们将使用普通输出格式(-oN)来保存数据包跟踪。
要将数据包跟踪输出保存到文件,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
执行 Nmap 命令:在终端中,输入以下命令并按回车键:
sudo nmap --packet-trace -oN trace.txt 127.0.0.1sudo:根据扫描类型,此命令可能需要 root 权限。nmap:这是命令行 Nmap 扫描器。--packet-trace:此选项告诉 Nmap 打印它发送和接收的数据包的跟踪信息。-oN trace.txt:此选项指定输出应以普通格式保存到文件trace.txt中。该文件将在你当前的目录(~/project)中创建。127.0.0.1:这是目标 IP 地址,即回环地址(localhost)。
观察输出:Nmap 将对 localhost 进行扫描,并将数据包跟踪打印到终端,同时保存到文件
trace.txt中。终端输出将类似于以下内容:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC SENT (0.0034s) to 127.0.0.1: TCP 127.0.0.1:54321 > 127.0.0.1:80 S ttl=64 id=12345 win=65535 RECV (0.0045s) from 127.0.0.1: TCP 127.0.0.1:80 > 127.0.0.1:54321 SA ttl=64 id=67890 win=14600 SENT (0.0045s) to 127.0.0.1: TCP 127.0.0.1:54321 > 127.0.0.1:80 A ttl=64 id=12346 win=65535 ... Nmap done: 1 IP address (1 host up) scanned in 0.123 seconds验证文件创建:扫描完成后,验证
trace.txt文件是否已在你的~/project目录中创建。你可以使用ls命令进行检查:ls ~/project你应该在输出中看到
trace.txt。查看文件内容:你可以使用
cat命令或像nano这样的文本编辑器查看trace.txt文件的内容:cat ~/project/trace.txt或者
nano ~/project/trace.txt文件将包含与打印到终端相同的数据包跟踪输出。
此步骤演示了如何将 Nmap 的数据包跟踪输出保存到文件中。在下一个步骤中,我们将在 Xfce 终端中分析数据包细节。
在 Xfce 终端中分析数据包详细信息
在本步骤中,我们将分析由 Nmap 的 --packet-trace 选项捕获的数据包细节。了解数据包跟踪输出有助于你诊断网络问题、理解 Nmap 探测的工作原理以及识别潜在的安全漏洞。我们将在 Xfce 终端中使用 grep 命令来过滤和检查特定的数据包。
要分析数据包细节,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
查看
trace.txt文件:在上一步中,你已将数据包跟踪输出保存到~/project目录中的trace.txt文件。如果你尚未完成该步骤,请返回并先完成它。使用
grep过滤数据包:grep命令是用于搜索文本文件的强大工具。我们可以使用它来过滤trace.txt文件并找到符合特定条件的数据包。例如,要查找所有发送到端口 80 的数据包,你可以使用以下命令:
grep " > 127.0.0.1:80" ~/project/trace.txtgrep:这是用于搜索文本的命令行实用程序。" > 127.0.0.1:80":这是搜索模式。它查找包含 " > 127.0.0.1:80" 的行,这表示发送到本地主机(127.0.0.1)上端口 80 的数据包。>之前的空格很重要,可避免匹配源端口。~/project/trace.txt:这是包含数据包跟踪输出的文件路径。
输出将显示
trace.txt文件中所有与搜索模式匹配的行。例如:SENT (0.0034s) to 127.0.0.1: TCP 127.0.0.1:54321 > 127.0.0.1:80 S ttl=64 id=12345 win=65535 RECV (0.0045s) from 127.0.0.1: TCP 127.0.0.1:80 > 127.0.0.1:54321 SA ttl=64 id=67890 win=14600 SENT (0.0045s) to 127.0.0.1: TCP 127.0.0.1:54321 > 127.0.0.1:80 A ttl=64 id=12346 win=65535分析数据包细节:检查输出以了解数据包细节。输出显示了数据包的方向(
SENT或RECV)、源和目标 IP 地址及端口、协议(TCP)以及其他标志和选项。SENT:表示 Nmap 发送的数据包。RECV:表示 Nmap 接收的数据包。TCP 127.0.0.1:54321 > 127.0.0.1:80:显示源 IP 地址和端口(127.0.0.1:54321)以及目标 IP 地址和端口(127.0.0.1:80)。S:表示设置了 SYN 标志,用于发起 TCP 连接。SA:表示设置了 SYN-ACK 标志,这是对 SYN 数据包的响应。A:表示设置了 ACK 标志,用于确认接收到的数据。ttl:生存时间。id:IP 标识号。win:窗口大小。
尝试不同的
grep模式:根据你的特定需求,尝试不同的grep模式来过滤数据包跟踪输出。例如:要查找所有 SYN 数据包:
grep "S ttl=" ~/project/trace.txt要查找所有从端口 80 接收的数据包:
grep "from 127.0.0.1:80" ~/project/trace.txt要查找具有特定 IP ID 的所有数据包:
grep "id=12345" ~/project/trace.txt
通过使用 grep 过滤和分析数据包跟踪输出,你可以更深入地了解 Nmap 的行为及其生成的网络流量。
在 Xfce 终端中识别扫描问题
在本步骤中,我们将使用 Nmap 的数据包跟踪和调试输出来识别潜在的扫描问题。这包括查找数据包交换中的异常情况,例如重传、意外响应或无响应。通过分析这些问题,你可以排查扫描问题并提高 Nmap 扫描的准确性和可靠性。
要识别扫描问题,请执行以下步骤:
打开终端:如果你尚未打开终端,请启动 Xfce 终端。
查看
trace.txt文件:在前面的步骤中,你已将数据包跟踪输出保存到~/project目录中的trace.txt文件。确保此文件存在并包含数据包跟踪信息。查找重传:当目标主机未确认数据包时,Nmap 会重新发送数据包,这就是重传。这可能表示网络拥塞、数据包丢失或防火墙阻止了流量。使用
grep搜索重传:grep "Retransmission" ~/project/trace.txt如果你看到包含“Retransmission”的行,则表示 Nmap 必须重新发送数据包。这可能是网络问题或防火墙的迹象。
分析 TCP 标志:检查数据包跟踪中的 TCP 标志,以了解 TCP 连接的状态。查找意外的标志组合或缺失的标志。例如,没有相应 SYN-ACK 响应的 SYN 数据包可能表示防火墙阻止了连接。
你可以使用
grep过滤特定的 TCP 标志。例如,要查找 SYN 数据包:grep "S ttl=" ~/project/trace.txt要查找 SYN-ACK 数据包:
grep "SA ttl=" ~/project/trace.txt比较发送的 SYN 数据包数量与接收到的 SYN-ACK 数据包数量。如果 SYN-ACK 数据包明显少于 SYN 数据包,则可能表示存在问题。
检查意外响应:有时,目标主机可能会发送意外响应,例如 ICMP 错误消息。这些响应可以提供有关扫描失败原因的有价值信息。
要查找 ICMP 数据包,使用以下命令:
grep "ICMP" ~/project/trace.txt分析 ICMP 消息以了解错误的性质。例如,“Destination Unreachable”表示目标主机不可达。
查找缺失响应:如果 Nmap 发送了探测但未收到响应,则可能表示目标主机已关闭、防火墙阻止了流量或探测在传输过程中丢失。
检查数据包跟踪以识别未收到响应的探测。例如,如果你向端口 80 发送了 SYN 数据包但未收到 SYN-ACK 数据包,则可能表示端口 80 已关闭或被过滤。
考虑调试输出:虽然前面的步骤侧重于数据包跟踪,但请记住,调试输出(来自
-d或-d2)也可以提供有价值的线索。它通常包含有关 Nmap 内部决策过程的信息,这可以帮助你理解它为何以某种方式运行。不幸的是,我们在前面的步骤中没有将调试输出保存到文件中,但在实际情况中,你会将该输出与数据包跟踪一起分析。
通过仔细分析数据包跟踪和调试输出,你可以识别潜在的扫描问题并采取措施解决它们。这将提高 Nmap 扫描的准确性和可靠性。
总结
在本实验中,我们通过使用 --packet-trace 选项来探索 Nmap 的调试功能,以观察扫描期间交换的网络数据包。这包括在 Xfce 终端中执行命令 sudo nmap --packet-trace 192.168.1.1(或者也可以使用 127.0.0.1)并分析详细输出,其中包括数据包类型、源和目标 IP 地址及端口,以及其他相关信息。
关键要点是了解 --packet-trace 如何提供一种从 Nmap 内部直接查看网络数据包的简化方式,从而能够更深入地理解 Nmap 的网络级操作,并有助于识别潜在的扫描问题。



