一个双击就能用的局域网 IP 扫描工具。扫一遍,网段里谁在线、
MAC 是多少、厂商是谁、哪台是 PLC,一目了然。
一、快速上手
- 双击
局域网设备扫描器.exe(就这一个文件,免安装,拷到任何电脑都能跑) - 程序自动列出本机所有网卡和网段 —— 双击「本机网卡」页里的一行, 即可把网段填进扫描框
- 按「开始扫描」,几秒钟出结果
- 需要存档就点「导出 CSV」,Excel 可以直接打开(UTF-8 带 BOM,不乱码)
二、扫描结果怎么读
| 列 | 说明 |
|---|---|
| IP 地址 | 双击该行可复制 IP;右键有复制菜单 |
| 状态 | 在线 / 未响应 |
| 时延 | ICMP 往返毫秒数(设备禁 ping 时为空,不代表异常) |
| MAC 地址 | 通过 ARP 获得,同网段设备最准 |
| 厂商 | 按 MAC 前 3 字节(OUI 前缀)查 IEEE 完整库 |
| 主机名 | NetBIOS 查询所得(Windows 机器基本都能查到) |
| 开放端口 | 工业常用 TCP 端口,如 102(S7comm)、502(Modbus) |
| 推测设备 | 按端口 + 厂商 + 主机名综合推测,仅供参考 |
典型识别效果:
- 开 102 端口 + 西门子 MAC →
西门子 S7 系列(PLC / CP 通信模块) - 开 102 端口 + 非西门子 MAC →
S7 协议设备(非西门子厂商,可能是协议网关)(串口服务器把别的协议转成 S7 时就是这样,比如有人物联网的网关) - 开 502 端口 →
Modbus TCP 设备(PLC / 仪表 / 变频器) - 开 445/3389 → Windows 主机 / 工控机
- VMWare / Hyper-V / VirtualBox 的虚拟网卡 →
虚拟机
三、网段可以怎么填
192.168.1.0/24 整个 C 段(自动跳过 .0 和 .255)
192.168.1.1-100 第 1 到第 100 号
192.168.1.1-192.168.2.50 跨段区间
192.168.1.10 单个地址
192.168.1.1,192.168.1.5 逗号分隔多个
一次最多 4096 个地址(/20)。更大的范围请拆开扫。
四、命令行用法(可选)
局域网设备扫描器.exe --list 只列本机网卡
局域网设备扫描器.exe --range 192.168.1.0/24 扫描并打印结果
局域网设备扫描器.exe --range 192.168.1.0/24 --out 结果.csv
局域网设备扫描器.exe --range 192.168.1.0/24 --no-ports 只要 IP/MAC,更快
局域网设备扫描器.exe --dns 额外做 DNS 反解(网络里没 PTR 记录时会慢,默认不用)
局域网设备扫描器.exe --help 完整帮助
五、性能参考(实测)
| 范围 | 用时 |
|---|---|
| 30 个地址(17 台在线,含端口扫描) | 3.5 秒 |
| /24 整段 254 个地址(99 台在线,含端口扫描) | 7.5 秒 |
六、扫描原理(结果为什么可信)
- 发现阶段:对同网段地址,先发一批 UDP 小包"踢"内核, 让 Windows 自己批量发出 ARP 请求,然后读系统 ARP 表。 (实测比逐个调 SendARP 快 40 倍:254 个地址 1.5 秒 vs 一分多钟) 跨网段地址 ARP 出不了网关,自动改用 ping。
- 详情阶段:只对已发现的在线设备做—— NetBIOS 查计算机名(UDP 137,250ms 超时)、 TCP 端口探测(0.25 秒超时 × 11 个工业常用端口,内部并发)。
- 全程只发查询报文(ARP / ICMP / TCP 连接 / NetBIOS 查询), 不下发任何配置或写入报文,不会改动设备状态。
七、厂商识别与补充
程序内置了 IEEE 完整 OUI 库(约 3.5 万条前缀),绝大多数设备都能认出厂商。
查不到会显示 未知(XX:XX:XX),常见原因:
- 小众品牌(IEEE 库里本来就没有)
- MAC 是随机生成的(手机开"随机 MAC"就会这样)
想补充自己现场的厂商名,两种办法:
- exe 同目录建
oui_extra.txt,一行一条(支持#注释): ```
格式:前缀,厂商名
00:1B:1B,西门子
00-80-F4 施耐德
```
- 点界面上的「导入 OUI 库」按钮,选一份 IEEE 的
oui.csv(standards-oui.ieee.org 提供),会自动缓存到 exe 同目录,长期生效。
优先级:用户文件 > 内置中文标注表 > IEEE 完整库。
八、常见问题
Q:扫出来比我预计的少?
① 网段填错了(设备在 192.168.0.x,你扫的是 192.168.1.x)
② 网卡选错了(本机多网卡时,先看「本机网卡」页哪张是"已连接")
③ 跨网段的设备必须能 ping 通才会被列出(ARP 出不了网关)
④ 超时太短,可把超时调到 1500ms 再试
Q:有的设备只有 IP,其他都是"—"?
它在线但不回应主机名/端口探测。PLC、仪表、摄像头常有这种行为,
属于正常防护,不影响"它在这个网段"这个事实。
Q:同一张网卡出现好几行?
一张网卡配了多个网段 IP 时就是这样的(每个 IP 一行),双击任一行即可切换。
Q:能不能扫无线网络?
能,工具按网卡扫,不区分有线无线。手机用"随机 MAC"时厂商会显示未知。
Q:会有安全软件报警吗?
批量 ping / 端口探测可能触发某些安全软件的提示,放行即可——
工具是纯查询行为,无可执行写入、无配置下发。
九、合规提醒
请只扫描你自己拥有或已获得明确授权的网络。
未经授权扫描他人网络可能违反《网络安全法》等相关法律法规。
十、文件清单
| 文件 | 说明 |
|---|---|
dist\局域网设备扫描器.exe | 成品,单文件免安装,双击即用 |
lanscan.py | 完整源码(GUI + 命令行 + 扫描核心) |
test_lanscan.py | 自动化校验(124 项,含与标准库交叉对照) |
nbstat_sample.bin | NetBIOS 解析的黄金样本(真实抓包) |
make_icon.py | 图标生成脚本(可复用) |
app.ico | 程序图标 |
oui_data.gz | 打包进 exe 的 IEEE OUI 完整库 |
使用说明.md | 本文件 |
十一、重新打包(如果要改源码)
# 用带 tkinter 的 Python 环境
pyinstaller --noconfirm --onefile --windowed --name LanScanner --icon app.ico --add-data "oui_data.gz;." lanscan.py
打包前记得分批清理 build 目录(每批 ≤45 个文件),
不要加 --clean 参数(会触发批量删除保护)。
小野 · 2026-09-14 · v1.0