解析WiFi数据包(libpcap)

解析WiFi数据包(libpcap),c,parsing,wifi,packet,libpcap,C,Parsing,Wifi,Packet,Libpcap,我一直在研究一种方法,让OpenWRT路由器将WiFi探测请求记录到MySQL数据库(它存储每个探测请求包的MAC地址和RSSI信息以及其他特定于路由器的数据) 在对libpcap进行了相当多的研究之后,我已经能够拼凑出一个基本的小程序,它使用过滤器表达式(“wlan子类型probe req”)在监视器接口(mon0)上简单地嗅探数据包,然后以十六进制打印原始数据包。有了libpcap上在线提供的信息,这一部分相当简单 现在我陷入了困境:如何解析WiFi数据包以检索我要查找的信息(RSSI和源M

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

在对libpcap进行了相当多的研究之后,我已经能够拼凑出一个基本的小程序,它使用过滤器表达式(“wlan子类型probe req”)在监视器接口(mon0)上简单地嗅探数据包,然后以十六进制打印原始数据包。有了libpcap上在线提供的信息,这一部分相当简单

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

要明确的是,我并不是要求代码来做这件事(尽管如果您想提供一些:d,我不会抱怨)。我只是想找一些关于理解哪个字节是哪个字节的指南——如果你愿意的话,一个WiFi包路线图

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

我知道以前已经这样做过,但老实说,当我浏览tcpdump的源代码时,我完全不知所措

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

干杯

编辑:更具体的答案

RSSI可以在RadioTap头中找到(在Linux上是这样的)。将RSSI与它所依赖的文件一起使用(与我链接到的文件位于同一目录中),从数据包中取出RSSI是相当简单的。如果任何人在使用radiotap parser.c函数时遇到问题,请随时联系


radiotap函数使提取源MAC地址变得非常容易,因为radiotap头结构包含radiotap头的长度(
it\u len
),该长度是可变的。由于我只解析具有固定长度的探测请求(请参阅第17页),因此只需制作一个指向
数据包+it_len+10
(源MAC地址在MAC帧开始后10个字节开始,从radiotap报头结束处开始)。从该指针开始的6个字节是802.11帧中的
addr2

我相信谷歌搜索“802.11帧格式”提供了一些有希望的链接。下面是对数据包的高级概述:。

您可以使用模块tshark来检索特定字段。

如果您使用的是pylibpcap,那么您可以通过这种方式获取RSSI。这是粗糙的,并对802.11帧中的标志进行了假设(即标志必须是0x0000482F),但它对我有效。这是一个python黑客攻击,我不想继续安装额外的模块(
dpkt
scapy
有这样做的功能,但没有很好的文档记录),因为黑客攻击只需调用
struct.unpack

(len,data,timestamp) = p.get_next()

if data[0:8] =='\x00\x00\x22\x00\x2F\x48\x00\x00' and len(data) >= 50:
  type_subtype = ord(data[34])
  dest_mac     = data[38:38+6]
  src_mac      = data[44:44+6]
  rssi,        = struct.unpack("b",data[22])

如果您的标志与上述不同,请查看OP问题中的
radiotap parser.c
,并找出如何计算RSSI字段的偏移量(本例中为22)。每个标志位将偏移量更改为1、2、4或8个字节。

我知道这篇文章很旧,但我在尝试进行wifi解析时遇到了它,运气不好,所以我希望我能够帮助其他人


有一个相对较新的库,但对于所有层次的堆栈来说都是惊人的。它叫做libTins,将为您解析堆栈每一层的数据包。其BSD已获得许可(截至2015年),并且非常容易进行嗅探。它构建在lib pcap之上,但如果您想自己进行嗅探,它将接受字节数组

谢谢你的链接,迈克,这帮了大忙。我没有考虑在搜索字符串中使用“框架格式”,但一旦我这样做了,我就找到了一条更有用的途径。我觉得用谷歌搜索作为答案很糟糕,但我希望我的搜索词会比你以前尝试过的更有用。很高兴它成功了:)另一个链接是到,你可以从中检索官方802.11标准。没问题,迈克,这正是我需要的@伙计,我实际上保存了一份802.11标准的PDF文件,它确实为我澄清了一些事情,但我必须承认,我在浏览所有这些信息时有点迷路了。谢谢你的链接,希望其他偶然发现它的人也会发现它很有用:)radiotap parser.c链接断了。