Linux 内网探测:使用 nmap -sn 快速扫描局域网所有在线 IP(开发板组网必备)


一、前言

在嵌入式开发、服务器组网调试场景中,经常会遇到:两台设备在同一个局域网,但不知道对方IP地址。

比如:Windows笔记本共享网络给OK3588开发板,两台设备同属192.168.1.x网段,需要快速找出所有开机的Linux设备。

如果挨个ping 1~254效率极低,推荐使用nmap工具,只用一条命令就能扫描整个C段网段,只探测主机是否在线,不扫描端口,速度快、无多余数据包。

核心命令:

bash 复制代码
nmap -sn 192.168.1.0/24

二、工具安装

Ubuntu / Debian 系统(OK3588、树莓派通用)

bash 复制代码
apt update
apt install nmap -y

CentOS / RHEL 系统

bash 复制代码
yum install nmap -y

权限说明

局域网ARP扫描建议加sudo,否则部分内网设备探测不到:

bash 复制代码
sudo nmap -sn 192.168.1.0/24

三、核心命令详解

1. 基础全网段扫描

bash 复制代码
nmap -sn 192.168.1.0/24
参数拆解:
  1. -sn不进行端口扫描(No port scan) ,仅做主机存活Ping探测。
    旧版本nmap等价参数为-sP,新版本统一使用-sn
  2. 192.168.1.0/24:扫描整个1网段所有IP(192.168.1.1 ~ 192.168.1.254)。
输出结果解读:

出现 Host is up 就代表该IP设备开机在线:

复制代码
Nmap scan report for 192.168.1.108
Host is up (0.002s latency).
Nmap scan report for 192.168.1.101
Host is up (0.003s latency).

四、扩展实用用法(组网调试高频场景)

用法1:扫描指定一段IP

只扫描100~120区间,缩小范围:

bash 复制代码
nmap -sn 192.168.1.100-120

用法2:同时扫描多个不同网段

bash 复制代码
nmap -sn 192.168.1.0/24 192.168.137.0/24

用法3:开启详细打印,同时显示MAC地址(区分Linux设备与路由器)

bash 复制代码
sudo nmap -sn -v 192.168.1.0/24

可以直接看到网卡硬件地址,快速分辨开发板、电脑、路由器。

用法4:把在线IP结果保存到文本

bash 复制代码
nmap -sn 192.168.1.0/24 > ip_list.txt

五、对比:原生bash ping扫描(无需安装软件)

如果暂时无法联网安装nmap,可以用系统自带循环ping脚本:

bash 复制代码
for i in {1..254}; do ping -c 1 -W 1 192.168.1.$i >/dev/null && echo "在线IP:192.168.1.$i"; done

缺点:扫描速度慢;nmap基于ARP探测,内网扫描成功率更高。


六、常见问题排查

问题1:部分在线主机扫描不出来

原因:

  1. 没有加sudo权限,ARP探测被限制;
  2. 目标主机开启防火墙,拦截了ICMP ping数据包。

解决方案:使用ARP强制扫描参数:

bash 复制代码
sudo nmap -sn -PR 192.168.1.0/24

-PR:强制使用ARP扫描,局域网内几乎不会漏设备。

问题2:网段填写错误

先查看本机IP,确认自己所处网段:

bash 复制代码
ip route
ifconfig

本机IP为192.168.1.108,则网段填写192.168.1.0/24


七、实战场景:开发板组网调试流程

  1. 笔记本与OK3588网线直连,处于同一局域网;
  2. 开发板执行sudo nmap -sn 192.168.1.0/24
  3. 找到笔记本共享网关IP;
  4. 修改开发板默认路由,把出口网关指向笔记本,实现网络共享上网。

八、总结

  1. 最简扫描命令:nmap -sn 网段,只探测在线主机,不扫端口,轻量高效;
  2. 内网优先加sudo + -PR,防止设备防火墙屏蔽ping导致扫描遗漏;
  3. 在嵌入式设备、ROS开发、多服务器局域网组网中,这是查找对端IP最常用的手段;
  4. 对比批量ping脚本,nmap扫描速度更快,ARP探测不受ICMP防火墙限制。