在手机端安装海康客户端「易调试」,通过树莓派释放的热点 WiFi 接入,能直接访问树莓派 ETH0 网络,并支持 SADP 协议扫描 ETH0 网络里的海康设备。
功能目标
- 手机连树莓派 WiFi 热点
- 能访问 ETH0 网段内的海康设备
- SADP 组播扫描正常工作
预研
SADP 协议
海康威视 SADP(Search Active Device Protocol)用于搜索和管理网络摄像头等设备。主要功能:
- 设备搜索:自动扫描网络中的海康设备
- 设备管理:查看状态、IP、序列号等
- 批量配置:修改 IP、重置密码等
- 固件升级
- 图形界面操作
技术上,SADP 工作在二层网络,基于 UDP 实现。即使手机没有配置或配置错误 IP,也能扫描发现子网内的设备。
NAT 方案为什么不行
参考 这篇 CSDN 文章 可以配置热点接入,通过 iptables 让 ETH0 作为 NAT 出口:
1 | sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
手机加入热点后可以访问 ETH0 内的 IP 设备,但 SADP 扫描不出设备。
在树莓派 ETH0 用 tcpdump 抓包、Wireshark 分析后发现:手机上的易调试向 239.255.255.250:37020 发送基于 ONVIF 的 UDP 组播,海康设备收到后会回复组播。当前 NAT 配置下,ETH0 能收到手机的组播,但设备回复的组播手机收不到——NAT 无法把组播消息转发回手机。
试了几次基本走不通,只能改用桥接。
详细步骤
操作系统
Raspberry Pi OS Lite 12 (bookworm)。
准备工作:更换 APT 源
1 | # /etc/apt/sources.list |
安装软件
1 | sudo apt install hostapd |
网络配置
/etc/network/interfaces
1 | source /etc/network/interfaces.d/* |
配置 br0 后,eth0 和 wlan0 均不再需要单独配置 IP,br0 上的 IP 在两个接口都可以被直接访问。
/etc/hostapd/hostapd.conf
1 | country_code=CN |
关键配置:interface 不应该是 br0(设成 br0 会报错),应指向释放热点的接口 wlan0,同时设置 bridge=br0。hw_mode 最好设成 g;设成 a 需要硬件支持。
到这一步,连入 WiFi 后给手机配静态 IP 就可以访问 ETH0 网络。如果 ETH0 里有 DHCP 手机会自动获取;大部分海康设备网络里没有 DHCP,可以增加 DHCP 服务。
/etc/dnsmasq.conf
1 | interface=br0 |
interface 一定要指向 br0——可以理解为 eth0 和 wlan0 都已经被 br0 替代,dnsmasq 可以在两边网络同时提供 DHCP。
启动
1 | sudo systemctl enable dnsmasq |
最好直接 reboot 一下。
验证
手机连入 WiFi free-wifi,密码 free_pwd_333,应自动获取 172.28.28.x 网段 IP。虽然不能访问外网,但用海康 SADP 扫描软件就可以扫描到局域网内部的设备了。
后续工作
如果实施人员用手机接入后需要再配置,可以通过 abcd.com 域名访问预设的配置页面,输入真实 IP 范围后,调用代码改动 interfaces 和 dnsmasq.conf,重启服务即可。
备注
如果功能异常,除了检查服务日志,还可以看 IP 转发设置。编辑 /etc/sysctl.conf,按需取消或增加注释 net.ipv4.ip_forward=1,然后 sudo sysctl -p 应用。