我一直在研究一种让 OpenWRT 路由器将 WiFi 探测请求记录到 MySQL 数据库的方法(它存储每个探测请求数据包的 MAC 地址和 RSSI 信息以及其他特定于路由器的数据)。
在对 libpcap 进行了大量研究之后,我已经能够拼凑出一个基本的小程序,它使用过滤器表达式('wlan subtype probe-req')简单地嗅探监视器接口(mon0)上的数据包,然后打印出原始数据包十六进制。借助 libpcap 上在线提供的信息,这部分非常简单。
现在我陷入了困境:如何解析 WiFi 数据包以检索我正在寻找的信息(RSSI 和源 MAC 地址)?
需要明确的是,我不是要求代码来执行此操作(尽管如果您想提供一些:D,我不会抱怨)。我只是在寻找某种指南来了解哪个字节是哪个 - 如果您愿意,请提供 WiFi 数据包路线图。
有一些很好的教程可用于解析通过以太网传入的数据包,但我无法找到任何有助于解析与 WiFi 相关的标头的内容。我认为这将是一个非常简单的过程——只需获取 RSSI 和源 MAC 的相关字节——但同样,我无法找到任何关于哪个字节是哪个字节的文档。
我知道这已经完成了,但老实说:在查看 tcpdump 的源代码时,我完全迷失了方向。
那么,有人知道如何解析 WiFi 数据包的好资源吗?
干杯
编辑:更具体的答案
RSSI 位于 RadioTap 标头中(嗯,在 Linux 上就是这样)。使用radiotap-parser.c以及它所依赖的文件(在与我链接的文件相同的目录中找到)从数据包中提取 RSSI 非常简单。如果有人在使用 radiotap-parser.c 函数时遇到问题,请随时与我们联系。
radiotap 函数使提取源 MAC 地址变得非常容易,因为 radiotap 标头结构包含 radiotap 标头 ( it_len
) 的长度,该长度是可变的。由于我只解析具有固定长度的探测请求(在此处查看第 17 页),因此只需制作一个指向的指针packet + it_len + 10
(源 MAC 地址在 MAC 帧开始后 10 个字节开始,它开始于radiotap 标头结束)。从该指针开始的 6 个字节addr2
位于 802.11 帧中(同样,请参见此处的第 17 页)。