Nmap 扫描故障排除

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何使用数据包跟踪和调试技术来排查 Nmap 扫描故障。本实验将指导你使用 --packet-trace 选项运行 Nmap 扫描以观察网络数据包,使用 -d2 启用调试级别 2,并结合跟踪和调试。

你还将学习如何使用 -oN 将跟踪输出保存到文件,并在 Xfce 终端中分析数据包详细信息以识别扫描问题。本实验使用 nmap --packet-trace 192.168.1.1nmap -d2 127.0.0.1nmap --packet-trace -oN trace.txt 127.0.0.1 等命令,提供诊断 Nmap 扫描问题的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/output_formats -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/save_output -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/port_scanning -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/target_specification -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/verbosity -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/service_detection -.-> lab-547117{{"Nmap 扫描故障排除"}} nmap/stealth_scanning -.-> lab-547117{{"Nmap 扫描故障排除"}} end

使用 nmap --packet-trace 192.168.1.1 进行带数据包跟踪的扫描

在本步骤中,我们将使用 Nmap 的 --packet-trace 选项来观察扫描期间发送和接收的数据包。这是一个强大的调试工具,可让你确切了解 Nmap 在网络层面的操作。

在开始之前,让我们简要讨论一下什么是数据包跟踪。数据包跟踪涉及捕获和分析网络数据包,以了解两个或多个设备之间的通信。Nmap 的 --packet-trace 选项提供了一种从 Nmap 内部直接查看这些数据包的简化方法。

要进行带数据包跟踪的扫描,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 执行 Nmap 命令:在终端中,输入以下命令并按回车键:

    sudo nmap --packet-trace 192.168.1.1
    • sudo:此命令需要 root 权限才能捕获网络数据包。
    • nmap:这是命令行 Nmap 扫描器。
    • --packet-trace:此选项告诉 Nmap 打印它发送和接收的数据包的跟踪信息。
    • 192.168.1.1:这是目标 IP 地址。如果此 IP 地址在你的网络中不可用,你可以将其替换为可从你的 LabEx VM 访问的设备的 IP 地址。一个常见的替代地址是 127.0.0.1(localhost)。
  3. 观察输出: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 接收的数据包。SENTRECV 后面的信息描述了数据包的协议(TCP)、源和目标 IP 地址及端口、标志(S 表示 SYN,A 表示 ACK,SA 表示 SYN-ACK)、TTL(生存时间)、ID 和窗口大小。

  4. 中断扫描:扫描将持续一段时间。你可以通过按 Ctrl+C 中断它。

此步骤演示了如何使用 --packet-trace 选项来深入了解 Nmap 的网络活动。在接下来的步骤中,我们将探索其他调试选项和技术。

使用 nmap -d2 127.0.0.1 启用调试级别 2

在本步骤中,我们将在 Nmap 中启用调试级别 2。调试输出提供了有关 Nmap 内部操作的详细信息,这有助于理解 Nmap 的工作原理并排查问题。

Nmap 的调试级别从 1 到 9。级别越高,输出越详细。对于本步骤,我们将使用调试级别 2,它在详细程度和可读性之间取得了良好的平衡。

要启用调试级别 2,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 执行 Nmap 命令:在终端中,输入以下命令并按回车键:

    sudo nmap -d2 127.0.0.1
    • sudo:根据扫描类型,此命令可能需要 root 权限。
    • nmap:这是命令行 Nmap 扫描器。
    • -d2:此选项将调试级别设置为 2。
    • 127.0.0.1:这是目标 IP 地址,即回环地址(localhost)。
  3. 观察输出: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 的操作方式和诊断问题很有用。

  4. 中断扫描:扫描将持续一段时间。你可以通过按 Ctrl+C 中断它。

此步骤演示了如何在 Nmap 中启用调试级别 2。在下一个步骤中,我们将结合数据包跟踪和调试输出进行更详细的分析。

使用 nmap --packet-trace -d 192.168.1.1 结合跟踪与调试

在本步骤中,我们将结合使用 --packet-trace-d 选项,以全面了解 Nmap 的操作。这将提供数据包级别的详细信息和内部调试信息,对于高级故障排除和理解 Nmap 的行为非常有用。

要结合数据包跟踪和调试,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 执行 Nmap 命令:在终端中,输入以下命令并按回车键:

    sudo nmap --packet-trace -d 192.168.1.1
    • sudo:此命令需要 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)。
  3. 观察输出: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

    你将看到 SENTRECV 行与诸如 NSE: Using Lua engine for script processing. 之类的调试消息交错出现。

  4. 中断扫描:扫描将持续一段时间。你可以通过按 Ctrl+C 中断它。

此步骤演示了如何在 Nmap 中结合数据包跟踪和调试输出。这种组合为理解和排查 Nmap 扫描提供了一个强大的工具。

使用 nmap --packet-trace -oN trace.txt 127.0.0.1 保存跟踪输出

在本步骤中,我们将把数据包跟踪输出保存到一个文件中,以便后续分析。当你想要更仔细地检查数据包细节或与他人共享输出时,这会很有用。Nmap 提供了多种以不同格式保存扫描结果的选项。在这里,我们将使用普通输出格式(-oN)来保存数据包跟踪。

要将数据包跟踪输出保存到文件,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 执行 Nmap 命令:在终端中,输入以下命令并按回车键:

    sudo nmap --packet-trace -oN trace.txt 127.0.0.1
    • sudo:根据扫描类型,此命令可能需要 root 权限。
    • nmap:这是命令行 Nmap 扫描器。
    • --packet-trace:此选项告诉 Nmap 打印它发送和接收的数据包的跟踪信息。
    • -oN trace.txt:此选项指定输出应以普通格式保存到文件 trace.txt 中。该文件将在你当前的目录(~/project)中创建。
    • 127.0.0.1:这是目标 IP 地址,即回环地址(localhost)。
  3. 观察输出: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
  4. 验证文件创建:扫描完成后,验证 trace.txt 文件是否已在你的 ~/project 目录中创建。你可以使用 ls 命令进行检查:

    ls ~/project

    你应该在输出中看到 trace.txt

  5. 查看文件内容:你可以使用 cat 命令或像 nano 这样的文本编辑器查看 trace.txt 文件的内容:

    cat ~/project/trace.txt

    或者

    nano ~/project/trace.txt

    文件将包含与打印到终端相同的数据包跟踪输出。

此步骤演示了如何将 Nmap 的数据包跟踪输出保存到文件中。在下一个步骤中,我们将在 Xfce 终端中分析数据包细节。

在 Xfce 终端中分析数据包细节

在本步骤中,我们将分析由 Nmap 的 --packet-trace 选项捕获的数据包细节。了解数据包跟踪输出有助于你诊断网络问题、理解 Nmap 探测的工作原理以及识别潜在的安全漏洞。我们将在 Xfce 终端中使用 grep 命令来过滤和检查特定的数据包。

要分析数据包细节,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 查看 trace.txt 文件:在上一步中,你已将数据包跟踪输出保存到 ~/project 目录中的 trace.txt 文件。如果你尚未完成该步骤,请返回并先完成它。

  3. 使用 grep 过滤数据包grep 命令是用于搜索文本文件的强大工具。我们可以使用它来过滤 trace.txt 文件并找到符合特定条件的数据包。

    例如,要查找所有发送到端口 80 的数据包,你可以使用以下命令:

    grep " > 127.0.0.1:80" ~/project/trace.txt
    • grep:这是用于搜索文本的命令行实用程序。
    • " > 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
  4. 分析数据包细节:检查输出以了解数据包细节。输出显示了数据包的方向(SENTRECV)、源和目标 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:窗口大小。
  5. 尝试不同的 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 扫描的准确性和可靠性。

要识别扫描问题,请执行以下步骤:

  1. 打开终端:如果你尚未打开终端,请启动 Xfce 终端。

  2. 查看 trace.txt 文件:在前面的步骤中,你已将数据包跟踪输出保存到 ~/project 目录中的 trace.txt 文件。确保此文件存在并包含数据包跟踪信息。

  3. 查找重传:当目标主机未确认数据包时,Nmap 会重新发送数据包,这就是重传。这可能表示网络拥塞、数据包丢失或防火墙阻止了流量。使用 grep 搜索重传:

    grep "Retransmission" ~/project/trace.txt

    如果你看到包含“Retransmission”的行,则表示 Nmap 必须重新发送数据包。这可能是网络问题或防火墙的迹象。

  4. 分析 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 数据包,则可能表示存在问题。

  5. 检查意外响应:有时,目标主机可能会发送意外响应,例如 ICMP 错误消息。这些响应可以提供有关扫描失败原因的有价值信息。

    要查找 ICMP 数据包,使用以下命令:

    grep "ICMP" ~/project/trace.txt

    分析 ICMP 消息以了解错误的性质。例如,“Destination Unreachable”表示目标主机不可达。

  6. 查找缺失响应:如果 Nmap 发送了探测但未收到响应,则可能表示目标主机已关闭、防火墙阻止了流量或探测在传输过程中丢失。

    检查数据包跟踪以识别未收到响应的探测。例如,如果你向端口 80 发送了 SYN 数据包但未收到 SYN-ACK 数据包,则可能表示端口 80 已关闭或被过滤。

  7. 考虑调试输出:虽然前面的步骤侧重于数据包跟踪,但请记住,调试输出(来自 -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 的网络级操作,并有助于识别潜在的扫描问题。