直接用nmap -sn扫不出在线主机,首要排查网段填写错误和未加sudo权限;ARP探测需root才能生效,否则降级为ICMP+SYN导致漏扫,应先用ip addr确认子网并执行sudo nmap -sn -PE -PS22,80,443增强探测。

直接用 nmap -sn 扫不出在线主机?先看网段和权限
绝大多数扫不到结果的问题,出在网段填错或没加 sudo。Linux 下 ARP 探测(本地网段最快方式)必须 root 权限,非 root 用户会自动降级为 ICMP+SYN 组合探测,而很多内网设备禁 ICMP,导致全显示 Host seems down。
- 先用
ip addr确认本机 IP 和子网掩码,算出正确 CIDR:比如192.168.1.5/24对应网段是192.168.1.0/24,不是192.168.0.0/16或随便写个*.*.*.* - 执行前务必加
sudo:sudo nmap -sn 192.168.1.0/24,否则 ARP 不生效,尤其对 Windows 和多数 IoT 设备漏扫严重 - 如果输出里有
MAC Address: xx:xx:xx:xx:xx:xx (Dell Inc.)这类字段,说明 ARP 成功;只有Host is up没 MAC,大概率是权限不足或跨网段
-sn 扫出来全是 down?换混合探测策略
目标主机禁 ping、防火墙丢包、或只开特定端口(比如只监听 22 或 80),-sn 默认行为就会失效。这时候不能直接上 -Pn,而是用更精准的混合探测补漏。
- 加
-PE强制发 ICMP Echo:sudo nmap -sn -PE 192.168.1.0/24,覆盖允许 ping 的设备 - 再加
-PS22,80,443向常见服务端口发 SYN 包:sudo nmap -sn -PE -PS22,80,443 192.168.1.0/24,能唤醒只开 SSH/Web 的设备 - 避免用
-PU(UDP ping),内网成功率低、耗时长,基本无效;-PP(ICMP timestamp)和-PM(ICMP netmask)也极少有用,不建议堆参数
扫到 IP 了,但没显示 MAC 地址?说明不是本地网段 ARP
只要输出里没有 MAC Address 字段,哪怕写了 Host is up,也代表 Nmap 没走 ARP,而是走了跨网段探测逻辑(ICMP + TCP SYN),可靠性下降,且无法识别厂商。
- 检查本机是否和目标在同一子网:比如你 IP 是
10.0.0.5/24,目标却在192.168.1.x,那肯定扫不到 MAC —— 这不是 Nmap 问题,是物理网络隔离 - 确认交换机没开端口隔离(Port Isolation)或私有 VLAN,这类配置会让 ARP 请求发不出去
- 某些虚拟化环境(如 VMware NAT 模式)下,宿主机和客户机不在同一二层,ARP 失效属正常,此时只能依赖
-PE -PS组合
PE 环境或无 root 权限时,nmap -sn 行为差异大
WinPE/Linux PE 里常缺 libpcap 或权限受限,nmap -sn 会退化成纯 ICMP 扫描,漏扫率陡增;普通用户在桌面 Linux 里不加 sudo,也会跳过 ARP 直接走 TCP ping。
- PE 下先运行
nmap -v确认能否加载驱动,若报libpcap not found,需手动补全libpcap.dll或改用fping -a -g 192.168.1.0/24 - 没 root 时,
nmap -sn实际等价于nmap -PE -PS80,443,但并发数极低,扫描慢且易超时,建议加--max-retries 1 --host-timeout 15s控制节奏 - 别信
nmap -sP—— 这是旧版参数,新版已弃用,文档里还留着纯属兼容,实际行为不稳定
真正卡住的点往往不在命令本身,而在你默认认为“IP 能通就一定在同一个广播域”——局域网不是地理概念,是二层可达范围。ARP 发不出去,再多探测包也白搭。











