主机发现策略

NmapBeginner
立即练习

简介

欢迎来到「主机发现策略」实验!

在安全专业人员或网络管理员分析系统漏洞之前,他们必须首先确定哪些系统处于在线状态并能做出响应。这个过程被称为「主机发现」或「Ping 扫描」。

主机发现关注的是「存在性」而非「暴露程度」。在此阶段,你询问的是「哪些地址看起来是活跃的?」,而不是「哪些服务存在漏洞?」。将这两个问题分开处理,可以使扫描过程更加可控且干扰更小。

在本实验中,你将学习如何使用行业标准的网络扫描工具 Nmap 来映射目标网络的边界。你将练习执行各种主机发现技术,包括禁用激进的端口扫描、执行隐蔽的 ARP ping 以及执行 ICMP 扫描,从而高效地发现活跃主机。

禁用端口扫描 (-sn)

在这一步中,你将学习主机发现最核心的概念:告诉 Nmap 只查找活跃主机,并跳过端口扫描阶段。

默认情况下,当你为 Nmap 提供一个 IP 地址时,它会首先检查主机是否在线;如果在线,Nmap 会自动继续扫描其端口(通常是前 1000 个常用端口)。虽然端口扫描很有用,但它会产生大量流量、耗时较长,且容易被防火墙和入侵检测系统(IDS)检测到。

将发现与枚举分开是专业人员常用的工作流程。首先找到活跃主机,然后再决定哪些主机值得进行更深入的探测。

当你的目标仅仅是映射网络并找出哪些 IP 地址处于活动状态时,你应该禁用端口扫描。你可以使用 -sn 标志(代表「Ping 扫描」或「无端口扫描」)来实现这一点。

让我们针对本地机器运行一次基础的主机发现扫描,以确保示例在实验环境中能可靠运行。请确保你位于默认工作目录 ~/project 中。

在终端中执行以下命令:

nmap -sn 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2026-10-25 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds

请注意,输出仅告知你「Host is up」(主机已启动)并提供了延迟时间。它没有列出任何开放或关闭的端口,这使得扫描速度更快且更隐蔽。

执行 ARP Ping 扫描

在这一步中,你将学习如何执行 ARP(地址解析协议)Ping 扫描。

当你扫描本地网络(与你连接到同一路由器或交换机的设备)时,发现主机最有效且最可靠的方法是使用 ARP。ARP 在 OSI 模型的第 2 层(数据链路层)运行。它会向网络询问:「谁拥有这个 IP 地址?请把你的 MAC 地址发给我。」

这种方法非常有效,因为 ARP 是本地通信的基础。设备可能会忽略 ping 请求,但它仍然需要 ARP 才能参与本地网络通信。

由于 ARP 对本地网络通信至关重要,防火墙很少会拦截它。这使得 ARP ping 在本地主机发现中极其准确。Nmap 使用 -PR 标志来指定 ARP ping。

注意:ARP 请求无法跨越互联网进行路由。因此,我们必须针对本地地址进行测试。在实际场景中,你会扫描你的本地子网,例如 192.168.1.0/24。

请注意,构建原始网络数据包(如自定义 ARP 请求)需要管理员权限,因此你必须在此命令前使用 sudo。

运行以下命令对本地机器执行 ARP ping:

sudo nmap -sn -PR 127.0.0.1

输出将如下所示,它在底层优先使用 ARP 请求来确定主机是否在线:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-10-25 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00008s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

当你审计企业内部网络或家庭 Wi-Fi 网络时,强烈建议使用 -PR。

执行 ICMP Echo 扫描

在这一步中,你将探索 ICMP Echo 扫描技术。

虽然 ARP 对于本地网络非常出色,但它无法跨越路由器。如果你正在扫描不同子网中的目标,则必须使用第 3 层(网络层)协议。最常用的方法是发送 ICMP Echo 请求,这与标准 ping 命令使用的机制完全相同。

这是一个很好的例子,说明了为什么网络层在实践中很重要。目标距离越远,你的发现技术就越依赖于可路由协议,而不是本地链路机制。

Nmap 允许你使用 -PE 标志显式请求 ICMP Echo ping。在本实验中,你将针对 127.0.0.1 练习此语法,以便示例保持独立,尽管 -PE 在检查本地链路之外的可达主机时特别有用。

让我们针对本地机器测试 ICMP Echo 扫描:

sudo nmap -sn -PE 127.0.0.1

你将看到熟悉的输出,确认目标响应了 ICMP 探测:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-10-25 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds

请记住,许多现代防火墙和 Windows 机器默认会阻止 ICMP Echo 请求以防止被发现。因此,如果主机没有响应 -PE,它可能仍然在线,只是忽略了 ping 请求。

将发现的主机保存到列表

在这一步中,你将学习如何将主机发现扫描的结果保存到文件中。

在扫描大型网络时,你可能会发现几十甚至几百个活跃主机。仅依赖终端输出是不切实际的。你需要将这些 IP 地址保存到文件中,以便后续将其输入到其他工具中,或对它们执行详细的端口扫描。

Nmap 提供了多种输出格式。-oN 标志以「正常」的人类可读格式保存输出,与终端中显示的内容完全一致。你只需在标志后提供所需的文件名即可。

让我们针对 127.0.0.1 运行一次基础 ping 扫描,并将结果保存到 ~/project 目录中名为 live_hosts.txt 的文件中:

nmap -sn 127.0.0.1 -oN live_hosts.txt

扫描完成后,你可以使用 cat 命令查看文件内容:

cat live_hosts.txt

输出将显示保存的扫描结果:

## Nmap 7.80 scan initiated Wed Oct 25 10:15:00 2026 as: nmap -sn -oN live_hosts.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up.
## Nmap done at Wed Oct 25 10:15:00 2026 -- 1 IP address (1 host up) scanned in 0.02 seconds

通过保存结果,你可以清晰地记录网络映射阶段的情况,这是任何安全评估中的一项关键最佳实践。

总结

恭喜!你已成功完成了「主机发现策略」实验。

在本实验中,你学习了如何在不触发干扰性端口扫描的情况下,通过发现活跃主机来高效地映射网络。你练习了使用 -sn 标志禁用端口扫描,利用 -PR 进行高精度的本地 ARP ping,并应用 -PE 进行标准的 ICMP Echo 扫描。最后,你学习了如何使用 -oN 标志将扫描结果保存到文件,从而记录你的发现。

这些基础技能对于任何在目标环境中进行侦察的网络管理员或安全专业人员来说都是必不可少的。