Nmap 主机发现:一次扫清整个网段,找出所有活着的机器
网络安全实战 90 天 · Week 2 侦察 · 难度 ★★ 入门 | 关键词:Nmap 主机发现 -sn arp-scan ping 扫描 网段存活
渗透测试里最常被跳过的第一步,是把「这个网段里到底有几台机器」搞清楚。不先做主机发现,直接对着一堆 IP 端口扫描,99% 的包都打在空气上。这篇讲 Nmap 的 -sn 主机发现、ARP 扫描、结果落盘,以及我自己踩过的那个「网段抄错一位,扫出 0 台主机」的坑。
一、主机发现和端口扫描的区别
Nmap 的工作可以分成四个阶段:主机发现 → 端口扫描 → 服务版本识别 → 操作系统识别。很多人直接从第二步开始,结果对着 254 个 IP 全扫端口,跑一晚上。
主机发现只做一件事:判断这个 IP 上有没有活着的机器。它不发几百个包,只发一两个探测包看有没有回应。先做这一步,后面所有扫描的范围就从「一个 /24」缩小到「4 台机器」,效率差几十倍。
说明 本文所有扫描在自建隔离环境内进行:Kali 192.168.159.128 扫描本地 Host-Only 网段 192.168.159.0/24,目标为自建 Metasploitable2 靶机。未对任何非授权网段发起扫描。
二、先确认工具和网络
2.1 确认 Nmap 版本
查看版本
bash
nmap --version
Kali 自带 Nmap,但先确认一下版本号有好处------不同版本支持的脚本和参数有差异,遇到「参数不认识」时第一时间就该怀疑版本。

2.2 确认自己的 IP 和网段
查看本机网络配置
bash
ip addr
ip route
这一步是整篇文章里最关键的准备工作,也是我踩坑的地方。ip addr 看网卡和 IP,ip route 看默认网关和本机所在网段。
Host-Only 网络下,Kali 通常拿到类似 192.168.159.128 的地址,掩码 /24,那么要扫的网段就是 192.168.159.0/24。这一步抄错,后面全废。

三、-sn:主机发现的主力参数
-sn 主机发现
bash
nmap -sn 192.168.159.128
nmap -sn 192.168.159.0/24
-sn 是 no port scan 的意思:只做主机发现,不扫端口。第一条先单点验证------扫自己,确认工具能用、网络通;第二条才铺开扫整个网段。
这个「先单点、再铺开」的顺序很重要。直接扫 /24,如果结果是 0 台存活,你没法判断是网段错了、网络不通、还是参数有问题。先扫自己拿到确定结果,再铺开,出问题时排查范围就小得多。

扫出来的结果里,192.168.159.1 是网关、.2 是 VMware 的 DHCP 服务、.128 是本机 Kali、.137 是 Metasploitable2 靶机。这四条就是后续所有工作的范围。
四、ARP 扫描:局域网内更快更准
ARP 层主机发现
bash
sudo nmap -sn -PR 192.168.159.0/24
sudo arp-scan -l
同一个二层网络里,ARP 比 ICMP 可靠得多。原因很简单:防火墙可以屏蔽 ping,但基本不会屏蔽 ARP------ARP 是局域网通信的基础,屏蔽了机器就上不了网。
-PR 是强制使用 ARP ping。arp-scan -l 是另一个专用工具,直接扫本机所在网段,输出里带 MAC 地址和厂商。

MAC 地址里的厂商前缀很有用:00:50:56 是 VMware 虚拟机的固定前缀,看到这个就知道对方是虚拟出来的靶机而不是物理设备。这个判断在后面区分「靶机」和「真实设备」时非常关键。
五、结果落盘:别让扫描白跑
输出到文件
bash
nmap -sn 192.168.159.0/24 -oN hosts.txt
nmap -sn 192.168.159.0/24 -oA scan_all
-oN 输出普通文本,人看得懂;-oA 一次性输出三种格式(.nmap / .xml / .gnmap),XML 给工具读、普通文本给人看。做侦察一定要落盘------终端滚屏是有上限的,几百行输出滚过去就找不回来了。

六、把结果整理成清单
扫描输出是原始数据,还要整理成能用的清单。我的做法是记三列:IP、MAC 前缀、推测角色。
| IP | MAC 前缀 | 推测角色 |
|---|---|---|
| 192.168.159.1 | --- | 网关(VMware NAT/Host-Only 虚拟网卡) |
| 192.168.159.2 | 00:50:56 | VMware DHCP 服务 |
| 192.168.159.128 | 00:0C:29 | 本机 Kali(VMware 虚拟机) |
| 192.168.159.137 | 00:0C:29 | Metasploitable2 靶机 |

这份清单就是下一篇文章(端口扫描)的输入。有了它,就不用再对着 254 个 IP 瞎扫。
七、踩坑记录
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 扫出 0 hosts up | 网段抄错一位(192.168.59.0 写成 192.168.159.0) | 用 ip addr 重新确认,不要凭记忆写网段 |
| 靶机扫不到 | 靶机网络模式与本机不一致(一个 NAT 一个 Host-Only) | 两台虚拟机都设成同一个 Host-Only 网卡 |
| -PR 报权限错误 | ARP 原始包需要 root | 加 sudo |
| 扫 /24 要等很久 | 默认时序保守,每个 IP 都等超时 | 加 -T4 提速,局域网内可放心用 |
坑 1:扫出 0 台主机,网段抄错一位
第一次跑 nmap -sn 192.168.59.0/24,返回「0 hosts up」。反复检查参数、换参数、加 sudo,全是 0。
折腾了二十分钟才回头看 ip addr------本机是 192.168.159.128,网段是 192.168.159.0/24,我少写了一个 1。扫描器没错,是我抄错了。
教训:网段永远从 ip addr 的输出里复制,不要凭记忆手打。这个错误看起来很低级,但在真实项目里同样高发------尤其是手里同时跟进多个网段的时候。
坑 2:靶机扫不到,网络模式不一致
网段改对之后,扫出了网关、DHCP、本机,但就是没有靶机 .137。
原因:靶机是新建的虚拟机,VMware 默认给它配了 NAT 网络,而 Kali 在 Host-Only 上。两台机器在不同的虚拟交换机里,物理上就不通。
解决:把两台虚拟机的网络适配器都设成同一个 Host-Only 网卡(VMnet1)。改完重启网络,再扫就出来了。
这条经验值得记:做靶场环境时,网络模式不一致是最高频的故障源,比任何工具配置问题都常见。
坑 3:-PR 需要 root
直接跑 nmap -sn -PR 192.168.159.0/24,报权限不足。
ARP 扫描要构造原始以太网帧,这是需要 CAP_NET_RAW 权限的操作,普通用户做不了。加 sudo 即可。同样地,后面要讲的 -sS(SYN 半开扫描)也需要 root,因为它要自己组 TCP 包。
坑 4:扫一个 /24 太慢
默认参数下扫 254 个 IP 要等好几分钟,因为 Nmap 对每个无响应的 IP 都会等超时。
加 -T4 把时序模板提到 aggressive。局域网内延迟极低,-T4 完全安全;只有在跨公网扫或者目标有 IDS 时才需要降到 -T2/-T3。这条在后面的端口扫描里更重要------全端口扫描不加 -T4 能跑半小时。
八、小结
-
先主机发现、再端口扫描,顺序不能反;否则大量扫描包打在空 IP 上。
-
-sn 只做发现不扫端口,先扫自己单点验证,再铺开扫网段。
-
局域网优先用 ARP(-PR / arp-scan),比 ICMP 可靠,防火墙基本不拦。
-
MAC 前缀能判断设备类型,00:50:56 / 00:0C:29 是 VMware 虚拟机的标志。
-
结果必须落盘(-oN / -oA),终端滚屏会丢数据。
-
网段从 ip addr 复制,别手打;虚拟机网络模式必须一致------这两个坑占了新手问题的八成。
下一篇:Day011 拿到存活主机清单之后,开始对靶机做端口扫描------默认扫描、SYN 半开、服务版本识别、操作系统指纹,一路做到全端口综合扫描。