制作一个用于分析 WiFi 网络的袖珍工具的想法促使我
感谢他们的想法。 我只是无事可做。
所有工作都是作为一种爱好完成的,目的是为了获得乐趣并扩展我在网络技术领域的知识。 从今年年初开始,慢慢地,每周 1..4 小时。
未计划使用应用程序。 那些。 它不是黑客工具。
目前,所有预期功能均有效。 所有来源,完全准备好组装,
我对“万能工具”的看法以及选择ESP32的原因
我不主张真相。 每个人都有她自己的。 我会尽力证明我选择“铁”的合理性。
也许我错了,将来,作者会将软件的源代码放在公共领域。 但如果没有的话我就不会买这么一块没有源代码的铁片了。
我的工具要求
盒子应该小(越小越好)。
因此:
- 不需要内置电池。 使用Wifi时电流>100mA,内置电池要么很大,要么用不了多久。 因此,让“盒子”由标准充电宝供电。 尽管如此,我的口袋/车里总是有一个移动电源。
- 将 Linux 与工具放在“盒子”内, 多年来以各种语言编写 在小屏幕和少量控制按钮的情况下,这是没有意义的。 可以在具有完整键盘和屏幕的普通笔记本电脑上查看/处理结果。
- 组件应该易于使用且广为人知(可用的 SDK、大量示例和文档)。
因此,对我来说,选择是显而易见的 - ESP32。
对于文章中提到的所有促使我采取行动的任务,ESP32 的功能已经足够了。 虽然我最想做的是:
- 玩转蓝牙。
- 使用最简单的硬件(仅幅度调制,足以满足实际需要)尝试 433mHz 范围。
ESP32 中的美中不足
- SDK (IDF) ESP32 有点笨拙。
- 部分功能(例如 WiFi 堆栈)没有以组装静态库的形式提供源代码。
- 不支持 5GHz 频段,使用 WiFi 时存在一些限制和笨拙。
但价格/尺寸完全弥补了这些缺点。
软件主要功能
我将简要描述功能和我的看法......
管理设置并从 SD 上传文件
所有外部控制都是通过在单独的菜单项中启动的简单网页来完成的。 ESP32 以 WiFi AP 模式启动并显示固定 IP 地址的页面。
虽然 ESP32 内核速度相当快,但是,正如实验所示,内置 Web 服务的同时运行和路由器模式等并不能很好地混合。 因此,不存在动态控制,并且在所有其他模式下该页面不可用。
此外,出于研究目的不需要动态控制。
使用信标包
模式很平庸,也不是很有趣。 做了“因为你可以”。 用于检查。
乐鑫官方示例中有示例。
AP列表扫描模式。
事实上,任何智能手机都可以做到。
那么,在这种模式下,AP 列表将被保存。
信标垃圾邮件发送者。
ESP32 作为具有隐藏 SSID 和随机 MAC 的 AP 启动,并开始在预先创建的 SSID 列表(手动创建或之前通过扫描 AP 列表获取)上发送 [信标帧]
WiFi嗅探模式
乐鑫开发人员增加了应用软件通过回调函数接收“空中飞行”的所有 WiFi 数据包的功能。 事实上,并非全部,因为您只能为一个固定通道设置模式。
回调函数调用的处理有非常严格的时间限制。 如果对于简单的统计收集模式来说这不会引起问题,那么对于将 PCAP 文件写入 SD 卡的模式,我必须进行修补,通过内存中的队列和信号量来组织记录。 考虑到调用回调的进程在一个内核上旋转,而写入 SD 的进程在另一个内核上旋转的特殊性。
在“嘈杂的空气”中,一些数据包丢失(队列中没有空间,它们被丢弃),但在晚上公寓的典型“空气”中(视线范围内有 5..7 个 AP),写入 PCAP有时间完成且不丢失数据包。
此外,对于PCAP监控和记录,有一种基于数据包头中的MAC列表的过滤模式。
例如,您可以在一个人进入或出现在视野中之前跟踪他在俱乐部/咖啡馆中的外观。 很少有人关闭 WiFi 和与已知 AP 的自动连接。 (我现在就把它关掉了..)
在 Wireshark 中查看记录的流量对于了解地图来说非常有用且有趣,这一切都有效。
解除身份验证数据包的操作模式
默认情况下,libnet80211.a 库中禁止发送这些包,该库没有源代码。 但通过纠正几个诱饵就可以很容易地阻止这种情况。 起初,我怀疑是否值得上传补丁。 但在启用了[取消验证框架]扫描模式的情况下走遍不同的地方后,我想:“到底是什么。” 而且,在esp8266中,这些包的发送并没有关闭,并且在github上的esp8266下有程序集。
在很多地方(我不会说在哪里)通过这种方法来抑制不需要的AP。 而且还不是“流氓”……
我仍然感到惊讶的是,我通过手机分配的互联网在某些地方不起作用......
此类数据包的数量和 RSSI 的跟踪模式对于了解“左侧 AP 不喜欢的地方”非常有用。
路由器模式
这个功能可能是所有功能中最值得探索的。
ESP32 支持 STA + SoftAP 模式同时运行。 因此,可以在其上实现经典的NAT路由器。
为了支持网络堆栈,Espressif 使用了 lwip 库的一个分支(几乎没有变化)。
但是,默认情况下,在标准程序集的 esp-lwip 库中,netif 接口“ap”(SoftAP)和“st”(STA)之间没有转发。
当然,没有 NAT 也可以做到,但是两个或多个 STA 同时连接到“ap”接口以及从网络接口“st”到“ap”的 IP 地址同步会出现问题。 所以复杂性不值得,通过NAT更容易。
此外,还有一个来自 marting-ger 的分支 esp-lwip,它添加了 IP4 NAT 的简单实现。
虽然我很想纯粹从外观上重做它(在我看来,没有分叉项目会更容易,但是通过 LWIPHOOK 构建定义的函数),但懒惰最终胜出,marting-ger 版本按原样使用。
在路由器模式下,可以查看传入和传出的 IP4 流量。
特别是,从中提取它以显示在屏幕上并在文件中收集统计信息:
- 连接到 SoftAP ESP32 的设备名称(DHCP 数据包)
- 来自连接到 SoftAP ESP53 的设备的 DNS 查询(UDP 端口 32)的 URL。
此外,您还可以在 PCAP 文件中启用流量记录。
这种模式非常有用,例如,为了了解您的手机向网络发送了什么以及它去了哪里。
考虑到在网络接口级别完全以编程方式控制 SoftAP ESP32 传入和传出流量的能力,您可以想到使用此模式的其他方法: Ehernet header (destMAC[6]+srcMAC[6]+type[2]) + 有效负载(IP4、IP6、DCHP 等类型)。
原则上,ESP32 可以很好地处理 WiFi->WiFi 路由器功能,让常规流量通过自身,没有太多延迟。 主观上,通过路由器连接到 ESP32 的手机的延迟并不明显。
不幸的是,在 Espressif API 中无法通过连接到 SoftAP EPS32 的 MAC 设置过滤器。 相反,建议对“不想要”的已连接 STA 说“再见”(esp_wifi_deauth_sta)。
必须通过调用 esp_wifi_deauth_sta() 来按 MAC 过滤已连接的 STA
总之
虽然我没有在 ESP32 的工作框架内提出任何新的东西,但也许有人会对结果感兴趣(来源)。
我想指出的是,该代码仅出于教育目的而编写。 对于“黑客攻击”等,是特意制作的,不太方便。
我没有制作印刷电路板,因为用电线焊接成品围巾需要1.5-2小时。
如果你这样做,那么你需要的不是用现成的电路板,而是用单独的组件来组装它。 那么尺寸会更小。
来源: habr.com