设计一款小巧的ESP32网络审计器,可自主扫描Wi-Fi,识别易受攻击的端口,并将数据同步至云端仪表盘
随着智能家居设备(IoT)的普及,我们的家庭和企业网络已成为静默漏洞的高危地带。智能电视、老旧的IP摄像头以及路由器经常运行未经加密的旧式服务,例如Telnet(端口23)或FTP(端口21)。
通常,进行网络审计需要一台专用计算机运行诸如Nmap等资源密集型工具。我开始思考:如果能把持续网络安全审计的强大力量集成到一个低成本的微控制器中,并实现全天候自主运行,会怎样?于是“Network Sweeper”应运而生——这是一款基于ESP32打造的袖珍设备,能够悄无声息地扫描您的网络。
该项目做什么?
网络清理器是一款基于硬件的自主式网络审计工具。当连接电源后,它会通过一个受控端口接入您的Wi-Fi,并立即启动安全循环:
入侵检测:扫描网络中所有活动设备,当有未知的MAC地址接入Wi-Fi时,通过物理显示屏发出警报。
端口指纹识别:检测关键端口,并自动评估设备的威胁等级。
云远程监控:将结构化报告发送至云端关系型数据库,通过仪表盘实现全球任何地点对网络安全状态的实时监控。
它是如何工作的?(建筑与工程)
该系统采用纯C++语言开发,使用Arduino/PlatformIO框架,充分发挥了ESP32芯片的性能。架构分为四大核心模块:
1. 使用LwIP和ARP发现网络
与许多现代防火墙在“隐身模式”下会阻止的传统ping命令(ICMP)不同,Sweeper 使用非阻塞的POSIX套接字(lwip/sockets.h)。它通过高端口注入TCP数据包,迫使路由器记录目标IP地址。随后,它直接查询LwIP内核的内部ARP表(etharp_get_entry),以获取设备的真实物理MAC地址,从而绕过操作系统防火墙的限制。
2. 状态存储与异常检测(SPIFFS)
由于设备可能被意外关机,因此需要“记住”其所属的网络。我使用了内置的闪存文件系统(SPIFFS)来存储一个名为 known_macs.json 的文件。每次扫描运行时,系统都会将数据与非易失性存储进行比对。如果检测到新的MAC地址,is_new 变量会被触发,LCD显示屏会发出物理警报,起到静音入侵报警的作用。
3. 指纹识别与威胁分类
扫描器会遍历预定义的服务目标数组(ServiceInfo)。端口80(HTTP)和443(HTTPS)被标记为非受攻击(is_vulnerable = false)。然而,如果23(Telnet)、21(FTP)或139(NetBIOS)等传统端口响应TCP握手,则整个主机将被标记为高危,提示管理员存在纯文本密码流量通过Wi-Fi传输。
4. 使用 Supabase 的批量同步(防崩溃内存管理)
硬件面临的最大挑战之一是处理大型网络。当连接超过100个主机的网络时,上传HTTP数据包中的JSON内容会超过25KB,导致ESP32在上传过程中耗尽有限的堆内存(RAM)。为了解决这个问题,我创建了一个分页(分块)系统:
ESP32 启动一个远程过程调用(RPC),在 Supabase 的 PostgreSQL 中创建扫描会话并捕获一个 UUID ID。
随后,代码会将发现的设备池进行切分,并以每次10台设备为一组发送报告,从而稳定使用RAM内存(缓冲区仅4KB),并避免TCP堆栈超时。
下一步
未来,我计划在新设备接入网络时添加自动提醒功能,并实现一个发送Magic Packets(Wake-on-LAN)的模块,直接通过云控制面板唤醒服务!
本文编译自hackster.io





