9 个不稳定版本 (3 个破坏性更新)

新版本 0.4.0 2024年8月13日
0.3.1 2024年7月11日
0.2.2 2024年6月22日
0.2.0 2024年4月8日
0.1.1 2024年1月25日

#771解析器实现

Download history 1/week @ 2024-05-21 125/week @ 2024-06-11 118/week @ 2024-06-18 17/week @ 2024-06-25 5/week @ 2024-07-02 240/week @ 2024-07-09 1/week @ 2024-07-16

每月241次下载

MIT/Apache

205KB
5K SLoC

IEEE80211-rs

IEEE80211-rs 是一个用于处理 IEEE 802.11 帧的库。它是高度实验性和不稳定的。由于架构可能会改变,因此不应在生产环境中使用。一旦发布第一个版本,就可以期待一定程度的 API 稳定性。

注意

此库目前仅由一个人开发。我会尽量频繁地添加内容,但这些通常是像 GraCe 这样主要项目的副产品,该项目启动了这个项目。我目前的重点是工作在 ESP32-Open-MAC 项目上,该项目旨在逆向工程 ESP32 的 PHY 和 MAC 层,并替换专有的 WiFi 栈。未来我希望能用 Rust 编写 WiFi 栈,该库将被用于此。如果您需要某些尚未添加的功能,请随时提交问题。如果它们不太复杂(不像 RSNE),我应该在一周内将其合并。如果您想自己实现它们,我很乐意在需要的地方提供帮助。

支持的功能

帧格式

仅支持协议版本零。这意味着目前不支持 S1G(802.11ah 或 HaLow)。

管理帧

  • 关联请求/响应
  • 探测请求/响应
  • 信标
  • ATIM
  • 断开连接
  • 去认证
  • 动作(无确认)

控制帧

  • RTS
  • CTS
  • 确认

数据帧

数据帧实现可以处理任何帧。

元素

  • SSID
  • 支持速率
  • DSSS 参数集
  • IBSS 参数集
  • BSS 负载
  • HT 能力/操作
  • 扩展支持速率
  • RSN
  • VHT 能力/操作
  • 供应商特定
  • OWE 转换

内容

本节列出了由本库处理的事物的范围。

序列化和反序列化

序列化和反序列化功能是我首先开始实现的功能,也可能是库中最成熟的部分。

架构

每个帧类型都有自己的类型表示,例如 BeaconFrame,并且可以通过 scroll 来读取和写入。如果以这种方式使用,确保读取正确的帧类型是用户的责任。如果您必须处理多个帧类型,可以使用 match_frames! 宏来处理不同的帧类型。

优化

该库可以从 Profile-Guide-Optimization(PGO) 中受益匪浅,可以通过 cargo-pgo 来使用。有关详细信息,请参阅 问题,由 zamazan4jk 提出,非常感谢他。

其他库

  • AirCap | Linux 上的 WiFi 捕获
  • Rtap | Radiotap 解析

no_std 和 zerocopy

此库不需要分配,也不会复制数据。它设计用于在嵌入式设备上使用。

不安全代码

在此库中使用不安全代码是禁止的。

贡献

很高兴看到您想贡献!首先,您应该检查是否有人正在处理它。如果没有,请fork仓库并创建一个草稿PR。这样,其他人可以看到有人在处理该功能。一旦您认为您的代码准备好合并,请移除草稿状态,我们将对其进行审查。

指南

每一行代码都应该经过测试。在撰写本文(2024年4月)时,并非每个结构都符合这一标准,但我们正在努力实现。对于读写测试,有一些宏可以自动生成这些测试。对于其他所有内容,您应该测试每个函数的预期输出。

您应该尝试在实际中使用自己的代码,因为这是真正测试它的唯一方法。例如,您可以构建一个嗅探器,让您的代码处理真实世界的数据。

访问 IEEE 802.11

IEEE 802.11 由 IEEE 版权所有,因此我们无法公开发布。但是,您可以通过 IEEE 的 GET 程序免费获取该标准的副本。这需要一个免费账户,并且只能让您访问目前有效的标准,这些标准比六个月旧。这意味着我们可能在2025年夏季中期就能实现IEEE 802.11be相关功能,因为预计它将在2024年第四季度获得批准。

许可证

您可以选择此库使用 MIT 或 Apache-2.0 许可证。

依赖关系

~1.6–2.3MB
~46K SLoC