4 个版本 (2 个破坏性更新)
0.3.1 | 2022年6月23日 |
---|---|
0.3.0 | 2021年5月9日 |
0.2.0 | 2021年4月23日 |
0.1.0 | 2021年4月16日 |
#1116 in 解析器实现
每月44次下载
66KB
1K SLoC
Libwifi
首先,这个库旨在易于扩展。
在 docs/Frame.md
中有一个架构/贡献指南,并且非常欢迎拉取请求。
涵盖所有可能的 802.11 帧或所有现有的 WiFi 工具的不同实现,对单个人来说是一项不可能的任务,让我们共同努力吧!
什么是 Libwifi
libwifi
的第一个目标是提供一个 便捷 的方法来解析原始的 IEEE 802.11 帧!
重点是 便捷,因为这个库并不专注于提供超高性能的实现。重点是提供易于使用的 API。
这包括表示给定帧结构的具有一致性和直观的结构体的 struct。
但这并不意味着这个库 并不很快 ;)。
第二个目标是提供一个统一的 API 来
- 查询您的 WiFi 接口的信息(iwlist 相当于)。
- 设置属性和配置您的 WiFi 接口(iwconfig 相当于)。
作为原型,计划调用和解析现有的二进制文件。然而,长期而言,希望对这些工具进行原生重新实现。
例如,wireless-tools 是一个功能强大的 C 库,具有大量文档和非常结构化的代码。这可以用于重新实现的指导方针。
该项目仍在积极开发中,许多功能仍缺失,但它应该是一个良好的 WiFi 库基础 :)
如何使用它
解析帧相对简单
use libwifi::parse_frame;
let bytes = [
180, 0, // FrameControl
158, 0, // Duration
116, 66, 127, 77, 29, 45, // First Address
20, 125, 218, 170, 84, 81, // Second Address
];
match libwifi::parse_frame(&bytes) {
Ok(frame) => {
println!("Got frame: {:?}", frame);
}
Err(err) => {
println!("Error during parsing :\n{}", err);
}
};
有关如何捕获、处理和解析 WiFi 流量的完整示例可以在 examples
目录中找到。
性能
benches
文件夹中有几个基准测试。
- 通过调用
cargo install cargo-criterion
安装cargo-criterion
。 - 使用
cargo criterion
运行基准测试。
目前,在 i7-8550U 上解析 Beacon
帧,这是较为复杂的帧之一,需要 ~1 µs
。
解析 Data
帧需要 ~84 ns
。
如果我们将其作为一个粗略的指导,你可以大致期望每秒处理一百万个帧。
免责声明:由于将添加更多缺失的功能/解析器,这可能会变得更慢。无论如何,我不认为这会低于每秒 100k 帧。
路线图和待办事项
解析器和帧
- 实现所有帧子类型的基本解析器。
- 为目前由
StationInfo
结构体通用处理的字段添加专用解析器。 - 处理所有边缘情况(有很多,我需要帮助!)
接口处理
我很想为库添加适当的接口处理。这包括以下功能:
- 切换模式
- 切换信道
- 发现可用信道
实施状态
- 管理帧
- AssociationRequest,
- AssociationResponse,
- ReassociationRequest,
- ReassociationResponse,
- ProbeRequest,
- ProbeResponse,
- TimingAdvertisement,
- Beacon,
- Atim,
- Disassociation,
- Authentication,
- Deauthentication,
- Action,
- ActionNoAck,
- 控制帧
- Trigger,
- Tack,
- BeamformingReportPoll,
- NdpAnnouncement,
- ControlFrameExtension,
- ControlWrapper,
- BlockAckRequest,
- BlockAck,
- PsPoll,
- Rts,
- Cts,
- Ack,
- CfEnd,
- CfEndCfAck,
- 数据帧
- Data,
- DataCfAck,
- DataCfPoll,
- DataCfAckCfPoll,
- NullData,
- CfAck,
- CfPoll,
- CfAckCfPoll,
- QosData,
- QosDataCfAck,
- QosDataCfPoll,
- QosDataCfAckCfPoll,
- QosNull,
- QosCfPoll,
- QosCfAckCfPoll,
- 帧组件
- 帧控制
- 序列控制
- 管理头部
- 动态管理头部字段
- SSID
- 支持速率
- 剩余字段的通用提取
- 所有其他字段
- 数据头部
- QoS 数据头部
- QoS 标志仍需正确解析
IEEE 802.11 规范还有很多内容,还有很多工作要做。
如果你发现缺少了你需要的东西,请考虑创建一个工单并贡献 :).
依赖项
~2.5MB
~57K SLoC