使用 Nmap 进行主机发现

NmapBeginner
立即练习

介绍

在本实验中,目标是学习如何使用 Nmap 进行主机发现。本实验涵盖了各种 Nmap 命令,包括在 192.168.1.0/24 网络上运行 ping 扫描,使用 -sn 选项禁用端口扫描;使用 TCP SYN ping 和 ACK ping;以及组合不同的 ping。它还展示了如何在 Xfce 终端中查看活动主机。此外,它演示了如何在禁用端口扫描的情况下对本地主机地址执行 ping 扫描。

使用 Nmap 执行 Ping 扫描

本步骤将使用 Nmap 执行基本 ping 扫描,以识别网络上的活动主机。Ping 扫描(也称为主机发现)是一种基本技术,用于确定哪些主机处于联机状态。Nmap 向指定范围内的每个 IP 地址发送各种探测,并分析响应以识别活动主机。Nmap 中的 -sn 选项禁用端口扫描,使扫描速度更快,并且比完整端口扫描更不具有侵入性。

192.168.1.0/24 是 CIDR 表示法,表示一个网络。/24 指示 IP 地址的前 24 位是固定的,定义了网络,其余 8 位用于该网络内的主机地址。这相当于从 192.168.1.1192.168.1.254 的 IP 地址范围。

要对 192.168.1.0/24 网络执行 ping 扫描,请打开你的终端(如果尚未打开),并执行以下命令:

sudo nmap -sn 192.168.1.0/24

此命令指示 Nmap 对 192.168.1.0/24 网络中所有 IP 地址执行 ping 扫描。sudo 命令用于,因为 Nmap 通常需要提升权限才能发送某些类型的网络数据包。

在本实验环境中,192.168.1.0/24 网络不包含任何活动主机,因此你将看到类似于此的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST

扫描完成,未显示任何主机报告,这表明此网络范围内没有主机响应 ping 探测。在真实场景中,如果有活动主机,你将看到类似于这样的输出:

Starting Nmap 7.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ
Nmap 扫描报告 192.168.1.1
主机已启动 (0.000XXs 延迟)。
Nmap 扫描报告 192.168.1.10
主机已启动 (0.002XXs 延迟)。
Nmap 完成:扫描了 256 个 IP 地址(2 个主机已启动)共 2.XX 秒

接下来,你将对本地主机地址 (127.0.0.1) 执行 ping 扫描,同时禁用端口扫描。这演示了如何专门使用 -sn 选项进行主机发现,而无需启动完整端口扫描。当只想检查主机是否存活,并避免可能产生噪音或耗时的端口扫描时,此方法非常有用。

127.0.0.1 是回环地址,也称为本地主机。它始终指当前机器。Ping 本地主机是快速验证网络接口是否正常运行的一种方法。

要对本地主机执行不进行端口扫描的 ping 扫描,请在你的终端中执行以下命令:

sudo nmap -sn 127.0.0.1

此命令指示 Nmap 对 127.0.0.1 地址执行 ping 扫描。-sn 选项确保 Nmap 只执行主机发现,而不会尝试扫描任何端口。

输出将指示主机是否已启动。它应该类似于此:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST
Nmap 扫描报告 localhost (127.0.0.1)
主机已启动。
Nmap 完成:扫描了 1 个 IP 地址(1 个主机已启动)共 0.00 秒

此输出确认本地主机 (127.0.0.1) 已启动并运行。Nmap 只执行了 ping 扫描(如 -sn 选项所指定),并未扫描任何端口。

执行 TCP SYN 和 ACK Ping 扫描

本步骤将使用 Nmap 执行 TCP SYN 和 ACK ping 扫描。这些技术通常比 ICMP ping 更可靠,因为许多防火墙会阻止 ICMP 流量,但允许 TCP 流量。

首先,让我们尝试对 192.168.1.1 执行 TCP SYN ping 扫描,以演示当主机不可达时会发生什么情况。TCP SYN ping 会向目标主机发送 TCP SYN 数据包。如果主机已启动并正在指定的端口(或默认情况下任何端口)上监听,它将以 SYN/ACK 数据包响应。然后 Nmap 通过发送 RST 数据包来重置连接。

Nmap 中的 -PS 选项指定你想要使用 TCP SYN ping。默认情况下,Nmap 将 SYN 数据包发送到端口 80。

要对 192.168.1.1 执行 TCP SYN ping 扫描,请在你的终端中执行以下命令:

sudo nmap -PS 192.168.1.1

此命令指示 Nmap 向主机 192.168.1.1 的端口 80 发送 TCP SYN 数据包。sudo 是必需的,因为 Nmap 需要提升权限才能创建和发送原始 TCP 数据包。

由于在本实验环境中 192.168.1.1 不可达,你将看到类似这样的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.10 seconds

此输出显示 Nmap 无法到达 192.168.1.1。该消息建议如果怀疑主机已启动但正在阻止 ping 探测,请尝试使用 -Pn

现在,让我们对本地主机 (127.0.0.1) 执行 TCP SYN ping 扫描,看看当主机可达时会发生什么:

sudo nmap -PS 127.0.0.1

这将显示类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Nmap 扫描报告 localhost (127.0.0.1)
主机已启动 (0.0000070s 延迟)。
未显示:995 个关闭端口
端口     状态 服务
22/tcp   开放 ssh
2121/tcp 开放 ccproxy-ftp
2222/tcp 开放 EtherNetIP-1
3001/tcp 开放 nessus
8080/tcp 开放 http-proxy

Nmap 完成:扫描了 1 个 IP 地址(1 个主机已启动)共 0.12 秒

此输出显示 Nmap 成功检测到本地主机已启动,并执行了端口扫描,显示了系统上的开放端口。

接下来,你将执行 ACK ping 扫描。ACK ping 会向目标主机发送 TCP ACK 数据包。与尝试建立连接的 SYN ping 不同,ACK ping 发送的数据包看起来像是已建立连接的一部分。防火墙通常会对传入的 ACK 数据包与 SYN 数据包有不同的处理规则,这使得 ACK ping 有用,可以绕过某些防火墙配置。

Nmap 中的 -PA 选项指定你想要使用 TCP ACK ping。默认情况下,Nmap 将 ACK 数据包发送到端口 80。

首先,让我们尝试对 192.168.1.1 执行 ACK ping:

sudo nmap -PA 192.168.1.1

正如预期的那样,这将显示主机已关闭:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.11 seconds

现在,让我们对本地主机执行 TCP ACK ping 扫描,看看成功的情况:

sudo nmap -PA 127.0.0.1

这将产生类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Nmap 扫描报告 localhost (127.0.0.1)
主机已启动 (0.0000040s 延迟)。
未显示:995 个关闭端口
端口     状态 服务
22/tcp   开放 ssh
2121/tcp 开放 ccproxy-ftp
2222/tcp 开放 EtherNetIP-1
3001/tcp 开放 nessus
8080/tcp 开放 http-proxy

Nmap 完成:扫描了 1 个 IP 地址(1 个主机已启动)共 0.11 秒

此输出显示 Nmap 向本地主机发送了 TCP ACK 数据包并收到了响应,表明主机已启动。扫描还显示了系统上的开放端口。

组合 Ping 扫描技术

本步骤将介绍如何使用 Nmap 结合 TCP SYN 和 ACK ping 扫描来发现网络上的活动主机。结合不同的 ping 类型可以提高主机发现的可靠性,因为某些主机可能响应一种类型的 ping 但不响应另一种类型,这可能是由于防火墙规则或网络配置造成的。

通过使用 -PS-PA 选项,Nmap 将向指定网络中的每个主机发送 TCP SYN 和 TCP ACK 数据包。这增加了检测活动主机的几率,尤其是在具有严格防火墙的环境中。

首先,让我们尝试在 192.168.1.0/24 网络上进行组合扫描,以演示当没有主机存在时会发生什么情况:

sudo nmap -PS -PA 192.168.1.0/24

此命令指示 Nmap 向 192.168.1.0/24 网络中的每个主机发送 TCP SYN 和 TCP ACK 数据包到端口 80。sudo 是必需的,因为 Nmap 需要提升权限才能创建和发送原始 TCP 数据包。

由于在本实验环境中此网络范围内没有活动主机,你将看到类似这样的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:51 CST

扫描完成,未显示任何主机报告,这表明此网络范围内没有主机响应 SYN 或 ACK ping 探测。

在真实场景中,如果有活动主机,输出将类似于以下内容:

Starting Nmap 7.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ
Nmap 扫描报告 192.168.1.1
主机已启动 (0.0010s 延迟)。
Nmap 扫描报告 192.168.1.2
主机已启动 (0.0015s 延迟)。
Nmap 扫描报告 192.168.1.10
主机已启动 (0.0012s 延迟)。
Nmap 完成:扫描了 256 个 IP 地址(3 个主机已启动)共 2.XX 秒

这将显示 Nmap 扫描了 192.168.1.0/24 网络,并发现了三个响应组合 ping 技术的主机。

为了演示结合 ping 技术的有效示例,让我们在本地主机上使用它:

sudo nmap -PS -PA 127.0.0.1

这将产生显示本地主机响应两种 ping 类型的信息的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:51 CST
Nmap 扫描报告 localhost (127.0.0.1)
主机已启动 (0.0000040s 延迟)。
未显示:995 个关闭端口
端口     状态 服务
22/tcp   开放 ssh
2121/tcp 开放 ccproxy-ftp
2222/tcp 开放 EtherNetIP-1
3001/tcp 开放 nessus
8080/tcp 开放 http-proxy

Nmap 完成:扫描了 1 个 IP 地址(1 个主机已启动)共 0.11 秒

最后,你可以查看你在终端中执行的命令,以识别你使用 Nmap 学习的技术。终端会保留你运行的命令的历史记录,这对于查看你的工作并验证扫描结果很有用。

要查看终端的命令历史记录,可以使用 history 命令。此命令将显示你之前执行的命令的编号列表。

键入以下命令并按 Enter 键:

history

这将显示你最近的命令列表。滚动浏览列表,找到你在之前的步骤中使用的 Nmap 命令,特别是使用 -sn-PS-PA 执行 ping 扫描的命令。

例如,你应该看到类似的命令:

  1  sudo nmap -sn 192.168.1.0/24
  2  sudo nmap -sn 127.0.0.1
  3  sudo nmap -PS 192.168.1.1
  4  sudo nmap -PS 127.0.0.1
  5  sudo nmap -PA 192.168.1.1
  6  sudo nmap -PA 127.0.0.1
  7  sudo nmap -PS -PA 192.168.1.0/24
  8  sudo nmap -PS -PA 127.0.0.1
  9  history

通过查看这些命令及其输出(你应该在之前的步骤中记录),你可以确认你学习的不同 ping 技术以及它们在可达和不可达主机上的行为。history 命令是审核你的工作并确保你已正确执行本实验步骤的有用工具。

注意:history 命令的精确输出将取决于你在终端会话中运行的命令。

总结

在本实验中,你学习了如何使用 Nmap 进行主机发现。你首先使用 -sn 选项对 192.168.1.0/24 网络执行 ping 扫描,以禁用端口扫描,这速度更快且干扰更小。你还在本地主机地址 127.0.0.1 上执行了禁用端口扫描的 ping 扫描。此外,你探索了不同的 ping 类型,例如使用 -PS 的 TCP SYN ping、使用 -PA 的 ACK ping,以及使用 -PS -PA 的组合 ping,以有效地识别各种网络场景中的活动主机。最后,你学习了如何在终端中查看你的命令历史记录,以验证你的操作并发现主机。