在 ESP32 上使用 Wifi 进行游戏

在 ESP32 上使用 Wifi 进行游戏

制作一个用于分析 WiFi 网络的袖珍工具的想法促使我 这篇文章.

感谢他们的想法。 我只是无事可做。

所有工作都是作为一种爱好完成的,目的是为了获得乐趣并扩展我在网络技术领域的知识。 从今年年初开始,慢慢地,每周 1..4 小时。
未计划使用应用程序。 那些。 它不是黑客工具。

目前,所有预期功能均有效。 所有来源,完全准备好组装, 发布在这里。 还有组装说明等,在这篇笔记中,我不会重复github上发布的信息。 我只会告诉你我认为有必要单独描述的内容。

我对“万能工具”的看法以及选择ESP32的原因

我不主张真相。 每个人都有她自己的。 我会尽力证明我选择“铁”的合理性。

文章中推荐的 选择使用 Linux(最初是 Raspberry Pi)+控制器(STM32)+ CC1110(8051 内核)形式的“外围设备”组合,并计划塞满一切可能的东西(125kHz、NFC、433mHz、USB、 iButton,蓝牙,?)进去似乎不适合我。 然而, 这个项目 看起来它将保持私有和封闭(flipper-zero github“这个组织没有公共存储库。”)并转向不太常见的硬件。

也许我错了,将来,作者会将软件的源代码放在公共领域。 但如果没有的话我就不会买这么一块没有源代码的铁片了。

我的工具要求

盒子应该小(越小越好)。

因此:

  • 不需要内置电池。 使用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

添加评论