跳转至

主机发现

主机发现是网络渗透的第一步. 目的是对 IP 范围 (通常是 IP 网段) 进行筛选, 得到其中具体的活跃设备的 IP.
一般情况下, 大部分 IP 是空闲的. 因此需要通过主机发现, 找到其中的少数活跃设备, 快速缩小目标范围.

常见命令 ping 是基于 ICMP 协议的, 通过发送 ICMP Echo Request (Type 8) 数据包, 并等待 ICMP Echo Reply (Type 0) 数据包来检测目标主机是否存活.
部分网络设备为了使自己更难被发现, 不会响应此类数据包. 禁用该功能通常也不会对设备的其他网络功能造成影响, 所以许多现代设备会默认禁用该功能. 而防火墙设备, 则可能直接过滤此类数据包.

相比基于 ICMP 的 ping, ARP 协议可以更有效地发现局域网中的设备. 因为 ARP 协议是数据链路层的基础协议, 禁用该协议将导致设备无法自动的接入以太网.
而且通过捕获被广播的 ARP 请求数据包, 还能实现被动的主机发现.
鉴于这是网络渗透的第一步, 攻击者可能还不清楚网络环境, 贸然使用主动扫描可能会引起 NIDS 的注意.

然而 ARP 协议依赖于 IPv4, 因此不适用于仅使用 IPv6 的设备或网络. IPv6 有对应的 ICMPv6 协议, 所以 ping 依然可以正常工作.
但是 IPv6 由于地址空间巨大, 通过枚举所有可能地址的扫描方式效率低下.

ARP 扫描

由于 ARP 是数据链路层协议, 因此相关工具需要 root 权限来发送此类数据包.

arp-scan

通过下面命令, 可以主动扫描本地子网内的设备:

> sudo arp-scan --localnet
Interface: wlan0, type: EN10MB, MAC: [DEL]            , IPv4: 192.168.2.35
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.2     [DEL]                   [DEL]
... SKIP ...
192.168.2.252   [DEL]                   [DEL]

77 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.687 seconds (95.27 hosts/sec). 34 responded

从输出结果的末尾可以看出, arp-scan 可以以极高的效率主动发现局域网中的设备.
并且可以根据 MAC 给出制造商的简要信息, 但这些信息并不完全, 部分有登记的制造商显示为 (Unknown).

netdiscover

主动扫描

sudo netdiscover
 Currently scanning: 192.168.127.0/16   |   Screen View: Unique Hosts

 137 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 8220
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname
 -----------------------------------------------------------------------------
 192.168.3.1     [DEL]                133    7980  [DEL]
... SKIP ...
 192.168.3.9     [DEL]                  2     120  [DEL]

被动扫描

主动 ARP 扫描效率极高, 但是也很容易被 NIDS 发现. netdiscover 还支持被动扫描, 通过监听网络上的 ARP 请求来发现设备.

> sudo netdiscover -p
 Currently scanning: (passive)   |   Screen View: Unique Hosts

 25 Captured ARP Req/Rep packets, from 3 hosts.   Total size: 1500
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname
 -----------------------------------------------------------------------------
 192.168.3.9     [DEL]                 3     180  [DEL]
... SKIP ...
 192.168.3.6     [DEL]                 7     420  [DEL]

Nmap

默认情况下, Nmap 会先尝试 ping 目标主机, 以确定其是否存活. 如果目标主机未响应, 则终止后续的扫描.
如果已经确认目标主机存活, 则可以添加 -Pn 参数跳过存活检测, 直接进行后续扫描.

  • -sn: 无端口扫描, 仅通过 ping 检测目标主机是否存活.
  • -Pn: 跳过目标主机存活检测, 直接进行后续扫描.

除了最基本的 ping, Nmap 还支持其他基于 ICMP 的存活检测方式:

  • -PE: 发送 ICMP Echo Request (Type 8) 数据包.
  • -PP: 发送 ICMP Timestamp (Type 13) 数据包.
  • -PM: 发送 ICMP Address Mask Request (Type 17) 数据包.
> nmap -sn 192.168.3.1/24
Starting Nmap 7.97 ( https://nmap.org ) at 2025-07-04 23:06 +0800
Nmap scan report for 192.168.3.1
Host is up (0.0050s latency).
MAC Address: [DEL]             ([DEL])
... SKIP ...
Nmap scan report for 192.168.3.48
Host is up (0.044s latency).
MAC Address: [DEL]             (Unknown)
Nmap done: 256 IP addresses (7 hosts up) scanned in 54.42 seconds

详情请参考: https://nmap.org/book/man-host-discovery.html

Metasploit

Metasploit 包含若干用于主机发现的模块 (包括 ARP 和 NDP). 相比其他工具, 它们使用起来更加繁琐. 扫描结果会被保存到工作区中.

详情请参考: https://www.offsec.com/metasploit-unleashed/scanner-discovery-auxiliary-modules/.

评论