【发布时间】:2013-05-23 23:14:45
【问题描述】:
我一直致力于让 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 页here),因此只需制作一个指向packet + it_len + 10 的指针(源MAC 地址在MAC 开头后10 个字节处开始)帧,它开始于 radiotap 报头结束的地方)。从该指针开始的 6 个字节是 802.11 帧中的 addr2(再次参见第 17 页 here)。
【问题讨论】:
-
radiotap-parser.c 链接已损坏。
标签: c parsing wifi packet libpcap