c - 解析 WiFi 数据包 (libpcap)

标签 c parsing wifi packet libpcap

我一直在研究一种让 OpenWRT 路由器将 WiFi 探测请求记录到 MySQL 数据库的方法(它存储每个探测请求数据包的 MAC 地址和 RSSI 信息以及其他特定于路由器的数据)。

在对 libpcap 进行了大量研究之后,我已经能够拼凑出一个基本的小程序,该程序使用过滤器表达式('wlan subtype probe-req')简单地嗅探监视器接口(interface)(mon0)上的数据包,然后打印出来十六进制的原始数据包。根据 libpcap 上在线提供的信息,这部分非常简单。

现在我遇到了困难:如何解析 WiFi 数据包以检索我要查找的信息(RSSI 和源 MAC 地址)?

需要说明的是,我并不是要代码来执行此操作(尽管如果您愿意提供一些代码,我不会提示 :D)。我只是在寻找某种指南,以了解哪个字节是哪个字节 - WiFi 数据包路线图,如果您愿意的话。

有一些很好的教程可以解析通过以太网传入的数据包,但我还没有找到任何有助于解析与 WiFi 特别相关的 header 的内容。我认为这将是一个非常简单的过程 - 只需获取 RSSI 和源 MAC 的相关字节 - 但同样,我无法找到任何关于哪个字节是哪个字节的文档。

我知道以前有人这样做过,但老实说:在查看 tcpdump 的源代码时,我完全迷失了。

那么,有人知道如何解析 WiFi 数据包的好资源吗?

干杯

编辑:更具体的答案

RSSI 位于 RadioTap header 中(好吧,在 Linux 上就是这样)。使用 radiotap-parser.c 从数据包中提取 RSSI 非常简单以及它所依赖的文件(与我链接到的文件位于同一目录中)。 如果有人在使用 radiotap-parser.c 函数时遇到问题,请随时与我们联系。

通过 radiotap 函数提取源 MAC 地址变得非常容易,因为 radiotap header 结构包含 radiotap header 的长度 (it_len),这是可变的。因为我只解析具有固定长度的探测请求(查看第 17 页 here),所以只需创建一个指向 packet + it_len + 10(源 MAC 地址)的指针在 MAC 帧开始后 10 个字节开始,它从 radiotap 报头结束的地方开始)。从该指针开始的 6 个字节是 802.11 帧中的 addr2(再次参见第 17 页 here)。

最佳答案

Google 搜索“802.11 帧格式”提供了一些我认为有希望的链接。这是对数据包进行布局的高级概述: https://www.technologyuk.net/telecommunications/computer-networks/wireless-networks.shtml

关于c - 解析 WiFi 数据包 (libpcap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16801270/

相关文章:

bash - 使用 awk getline bash 从指定时间范围内的日志文件中提取数据

authentication - 配置 OpenWrt 以提供 HTTP 身份验证

android - 无需任何中间服务器或 Skype 等第三方连接即可通过 WiFi 进行视频通话

android - 当设备连接到您的 android wifi 网络共享 AP 时如何获得通知?

c - 这段C代码的bug在哪里

c++ - 任何在 64 位机器上使用 8 个字节作为 int 数据类型大小的 C/C++ 编译器

c - scanf 未终止

c - 循环函数名称

python - 解析来自网站的数据 (.xml)

node.js - 在node.js中解析bookmark.html