在 Nmap 中比较扫描结果

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何比较 Nmap 中的扫描结果。该实验包括对目标 IP 地址执行 SYN 和 TCP 扫描,将输出保存到单独的文件中,然后使用 diff 命令比较这些文件。你还将探索详细扫描,并在 Xfce 终端中分析观察到的差异。

首先,使用 nmap -sS -oN syn.txt 192.168.1.1 运行 SYN 扫描,使用 nmap -sT -oN tcp.txt 192.168.1.1 运行 TCP 扫描,分别将结果保存到 syn.txttcp.txt 中。然后使用 diff syn.txt tcp.txt 比较这些文件。此外,使用 nmap -v -sS 127.0.0.1nmap -v -sT 127.0.0.1 进行详细扫描,并将比较记录保存在 Xfce 文本编辑器中,以便在 Xfce 终端中进行分析。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/timing_performance("Timing and Performance") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") subgraph Lab Skills nmap/tcp_connect_scan -.-> lab-547091{{"在 Nmap 中比较扫描结果"}} nmap/save_output -.-> lab-547091{{"在 Nmap 中比较扫描结果"}} nmap/timing_performance -.-> lab-547091{{"在 Nmap 中比较扫描结果"}} nmap/verbosity -.-> lab-547091{{"在 Nmap 中比较扫描结果"}} nmap/syn_scan -.-> lab-547091{{"在 Nmap 中比较扫描结果"}} end

使用 nmap -sS -oN syn.txt 192.168.1.1 运行 SYN 扫描并保存结果

在这一步中,你将使用 Nmap 执行 SYN 扫描,并将输出保存到一个文件中。SYN 扫描,也称为半开放扫描,是一种 TCP 端口扫描类型,用于尝试确定目标系统上 TCP 端口的状态。它被称为“半开放”,是因为扫描主机不会完成 TCP 连接握手。相反,它发送一个 SYN 数据包并分析响应。这种技术比完整的 TCP 连接扫描更隐蔽,因为它不会建立完整的连接,有可能避免被一些防火墙和入侵检测系统检测到。

以下是该命令的详细解释:

  • nmap:Nmap 命令行扫描器。
  • -sS:指定 SYN 扫描技术。
  • -oN syn.txt:指定输出应以正常(人类可读)格式保存到名为 syn.txt 的文件中。
  • 192.168.1.1:要扫描的目标 IP 地址。将其替换为你要扫描的目标的实际 IP 地址。如果你在虚拟环境中运行此实验,你可能会使用 127.0.0.1(localhost)作为目标。

让我们执行该命令。首先,确保你在 ~/project 目录中。

cd ~/project

现在,运行 SYN 扫描:

sudo nmap -sS -oN syn.txt 192.168.1.1

注意:你可能需要 sudo 权限才能执行 SYN 扫描,因为它需要发送原始数据包。如果你使用的是不同的目标 IP 地址,请将 192.168.1.1 替换为正确的 IP。如果你正在扫描本地主机,可以使用 127.0.0.1

扫描完成后,你可以使用文本编辑器或 cat 命令查看 syn.txt 文件的内容:

cat syn.txt

输出将显示扫描期间收集的开放端口和其他信息。确切的输出将取决于目标系统及其配置。

示例输出(具体输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00020s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

此输出表明目标系统上的端口 22、80 和 443 是开放的。“filtered”端口表示由于防火墙规则或网络条件,Nmap 无法确定这些端口是开放还是关闭。

使用 nmap -sT -oN tcp.txt 192.168.1.1 运行 TCP 扫描并保存结果

在这一步中,你将使用 Nmap 执行 TCP 连接扫描,并将输出保存到一个文件中。由 -sT 选项指定的 TCP 连接扫描是 TCP 扫描的一种基本形式,其中 Nmap 尝试在每个端口上与目标主机建立完整的 TCP 连接。这涉及完成三次握手(SYN、SYN-ACK、ACK)。虽然这种方法很可靠,但由于目标系统会记录连接,所以也很容易被检测到。

以下是该命令的详细解释:

  • nmap:Nmap 命令行扫描器。
  • -sT:指定 TCP 连接扫描技术。
  • -oN tcp.txt:指定输出应以正常(人类可读)格式保存到名为 tcp.txt 的文件中。
  • 192.168.1.1:要扫描的目标 IP 地址。将其替换为你要扫描的目标的实际 IP 地址。如果你在虚拟环境中运行此实验,你可能会使用 127.0.0.1(localhost)作为目标。

让我们执行该命令。首先,确保你在 ~/project 目录中。

cd ~/project

现在,运行 TCP 连接扫描:

sudo nmap -sT -oN tcp.txt 192.168.1.1

注意:虽然 TCP 连接扫描并非严格需要 sudo,但为了保持一致性并避免潜在的权限问题,使用它是个好习惯。如果你使用的是不同的目标 IP 地址,请将 192.168.1.1 替换为正确的 IP。如果你正在扫描本地主机,可以使用 127.0.0.1

扫描完成后,你可以使用文本编辑器或 cat 命令查看 tcp.txt 文件的内容:

cat tcp.txt

输出将显示扫描期间收集的开放端口和其他信息。确切的输出将取决于目标系统及其配置。

示例输出(具体输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00020s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

此输出表明目标系统上的端口 22、80 和 443 是开放的。“closed”端口表示 Nmap 收到了一个针对其 SYN 数据包的 RST(重置)数据包,这表明该端口是关闭的。

使用 diff syn.txt tcp.txt 比较文件

在这一步中,你将使用 diff 命令比较你在前面步骤中创建的 syn.txttcp.txt 文件。diff 命令是一个用于识别两个文件之间差异的强大工具。它逐行比较文件,并突出显示任何添加、删除或修改的内容。

在运行 diff 命令之前,了解 SYN 扫描(-sS)和 TCP 连接扫描(-sT)的输出为何可能不同很重要。SYN 扫描是一种“半开放”扫描,这意味着它不会完成完整的 TCP 握手。这可以使其更隐蔽,但在某些情况下也不太可靠,因为防火墙或网络设备可能会阻止初始 SYN 数据包或响应。另一方面,TCP 连接扫描完成完整的 TCP 握手,使其更可靠但也更容易被检测到。

要比较文件,请使用以下命令:

diff syn.txt tcp.txt

此命令将比较 syn.txttcp.txt 文件,并在终端中显示任何差异。

示例输出(具体输出将根据目标系统和网络条件而有所不同):

2,4c2,4
< Nmap scan report for 192.168.1.1
< Host is up (0.00020s latency).
< Not shown: 997 filtered ports
---
> Nmap scan report for 192.168.1.1
> Host is up (0.00020s latency).
> Not shown: 997 closed ports
5c5
< 22/tcp  open  ssh
---
> 22/tcp  open  ssh
6c6
< 80/tcp  open  http
---
> 80/tcp  open  http
7c7
< 443/tcp open  https
---
> 443/tcp open  https
10c10
< Nmap done: 1 IP address (1 host up) scanned in 2.50 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 2.50 seconds

在此示例中,输出显示两个文件之间的主要区别在于“Not shown”行。SYN 扫描(syn.txt)显示“997 filtered ports”,而 TCP 连接扫描(tcp.txt)显示“997 closed ports”。这表明 SYN 扫描由于过滤无法确定某些端口的状态,而 TCP 连接扫描能够确定这些端口是关闭的。

diff 输出使用以下符号:

  • <:表示仅存在于第一个文件(syn.txt)中的行。
  • >:表示仅存在于第二个文件(tcp.txt)中的行。
  • c:表示这些行不同,需要进行更改以使文件相同。

通过分析 diff 输出,你可以深入了解两种扫描类型之间的差异以及它们如何感知目标系统。

使用 nmap -v -sS 127.0.0.1 和 nmap -v -sT 127.0.0.1 运行详细扫描

在这一步中,你将在启用详细选项的情况下,对本地主机(127.0.0.1)同时运行 SYN 和 TCP 连接扫描。Nmap 中的 -v 选项会增加详细程度,提供有关扫描过程的更多详细信息。这有助于理解 Nmap 的工作方式以及排查任何问题。

首先,让我们运行详细的 SYN 扫描:

sudo nmap -v -sS 127.0.0.1

此命令将对本地主机执行 SYN 扫描,并在终端中显示详细输出。你将看到有关扫描进度的更多信息,包括正在扫描的端口、扫描时间以及出现的任何错误或警告。

示例输出(具体输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
NSE: Loaded 0 scripts for scanning.
Initiating SYN Stealth Scan
Scanning 127.0.0.1 [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 443/tcp on 127.0.0.1
Completed SYN Stealth Scan at 10:15, 2.50s elapsed (1000 total ports)
Nmap scan report for 127.0.0.1
Host is up (0.000020s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

接下来,运行详细的 TCP 连接扫描:

sudo nmap -v -sT 127.0.0.1

此命令将对本地主机执行 TCP 连接扫描并显示详细输出。

示例输出(具体输出会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:16 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Connect Scan
Scanning 127.0.0.1 [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 443/tcp on 127.0.0.1
Completed Connect Scan at 10:16, 3.00s elapsed (1000 total ports)
Nmap scan report for 127.0.0.1
Host is up (0.000020s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

观察输出中的差异。详细输出提供了有关扫描过程的更多详细信息,例如正在执行的扫描类型(“SYN Stealth Scan”或“Connect Scan”)、扫描的端口数量以及完成扫描所需的时间。你还可以看到被发现开放的端口。

通过比较 SYN 和 TCP 连接扫描的详细输出,你可以更好地理解每种扫描类型的工作方式以及它们与目标系统的交互方式。

在 Xfce 文本编辑器中保存比较记录

在这一步中,你将使用 Xfce 文本编辑器来保存你在前几步中的观察结果和比较内容。这是记录你的发现并理解 Nmap 扫描类型之间差异的关键步骤。

首先,打开 Xfce 文本编辑器。你可以通过在 Xfce 应用程序菜单中搜索“文本编辑器”,或者在终端中运行以下命令来完成:

mousepad notes.txt

此命令将打开 Xfce 文本编辑器(Mousepad),并在你的 ~/project 目录中创建一个名为 notes.txt 的新文件。

现在,在文本编辑器中,写下你对 SYN 扫描和 TCP 连接扫描之间差异的观察结果。考虑以下几点:

  • 速度:哪种扫描类型更快?
  • 准确性:两种扫描类型是否都识别出了相同的开放端口?如果没有,原因可能是什么?
  • 隐蔽性:哪种扫描类型被认为更隐蔽,为什么?
  • 防火墙规避:防火墙可能如何不同地对待每种扫描类型?
  • 详细输出:你从详细扫描中获得了哪些额外信息?

以下是你的记录可能的样子示例:

Nmap 扫描比较记录:

SYN 扫描(-sS):
- 比 TCP 连接扫描更快。
- 由于过滤端口,可能不太准确。
- 由于未完成完整的 TCP 握手,被认为更隐蔽。
- 防火墙可能会阻止 SYN 数据包,导致结果不准确。

TCP 连接扫描(-sT):
- 比 SYN 扫描慢。
- 由于完成了完整的 TCP 握手,更可靠。
- 不太隐蔽,因为很容易被检测到。
- 被防火墙阻止的可能性较小,提供更准确的结果。

详细输出(-v):
- 提供有关扫描过程的更详细信息。
- 有助于理解 Nmap 的工作方式并排查问题。
- 显示正在执行的扫描类型和扫描的端口数量。

观察到的差异:
- SYN 扫描报告“过滤”端口,而 TCP 连接扫描报告“关闭”端口。
- 这表明某些端口被过滤,阻止 SYN 扫描确定其状态。

完成记录后,通过在文本编辑器中点击“文件”->“保存”,或者按 Ctrl+S 来保存文件。

这个 notes.txt 文件将在下一步中用于在 Xfce 终端中分析差异。

在 Xfce 终端中分析差异

在这一步中,你将基于上一步保存的记录,使用 Xfce 终端进一步分析 SYN 扫描和 TCP 连接扫描之间的差异。你将使用命令行工具搜索特定模式并比较扫描结果。

首先,打开 Xfce 终端。

现在,让我们使用 cat 命令来显示 syn.txttcp.txt 文件的内容,这两个文件包含了前两步的 Nmap 扫描结果:

cat syn.txt
cat tcp.txt

检查这两个命令的输出。注意扫描结果中的差异,例如报告的端口状态(开放、关闭、过滤)以及完成扫描所需的时间。

接下来,使用 grep 命令在扫描结果中搜索特定关键词。例如,你可以在两个文件中搜索单词“open”:

grep "open" syn.txt
grep "open" tcp.txt

比较这些命令的输出。两次扫描报告的开放端口是否相同?如果不同,差异是什么?

你还可以搜索其他关键词,如“closed”或“filtered”,以进一步分析扫描结果。

现在,让我们再次使用 diff 命令比较 syn.txttcp.txt 文件:

diff syn.txt tcp.txt

查看 diff 命令的输出。这将突出显示两个文件中不同的行。注意那些表明报告的端口状态有差异的行。

最后,使用 cat 命令显示 notes.txt 文件的内容,该文件包含了你上一步的观察结果:

cat notes.txt

回顾你的观察结果,并将它们与扫描结果以及 diff 命令的输出进行比较。你的观察结果与扫描结果一致吗?你能解释任何差异吗?

通过使用 Xfce 终端和命令行工具来分析 Nmap 扫描结果,你可以更深入地理解 SYN 扫描和 TCP 连接扫描之间的差异,以及它们与目标系统的交互方式。这种分析将帮助你在不同情况下明智地决定使用哪种扫描类型。

总结

在这个实验中,我们首先使用 Nmap 对目标 IP 地址(192.168.1.1 或本地主机)执行 SYN 扫描,命令为 nmap -sS -oN syn.txt 192.168.1.1。这涉及到理解 SYN 扫描作为一种更隐蔽的“半开放”TCP 端口扫描的目的,它避免建立完整连接。扫描的输出以正常格式保存到名为 syn.txt 的文件中。

关键的学习点是如何使用 Nmap 执行 SYN 扫描、解释命令参数(-sS 用于 SYN 扫描,-oN 用于输出到文件的正常格式),以及理解由于使用原始数据包可能需要 sudo 权限。我们还学习了如何使用 cat syn.txt 查看扫描结果。