Openwrt WIFI探针开发【二】
来源:互联网 发布:知乎 完颜亮 编辑:程序博客网 时间:2024/05/16 00:43
2017.9.26
公开源码(Apache2.0协议)
https://github.com/769484623/WiFiProbe
—————————————————————————————————————————————————————
前文我们已经使用了PCAP库实现了对原始数据的获取,现在我们来谈谈对原始数据的处理,来得到我们想要的东西。
首先我说下我们获取的数据的结构。
我们获取到的数据是 Radiotap+Mac帧 。Radiotap的长度是变长的,所以想要精确地确定Mac帧开头位置,同时获取到RSSI等信息,我们需要使用Radiotap解析库。
Radiotap
李迟博主这篇对Radiotap的介绍写的很好,链接如下:
http://blog.csdn.net/subfate/article/details/53170546
接下来我们需要注意的就是这个结构:
struct ieee80211_radiotap_header { u_int8_t it_version; /* set to 0 */ u_int8_t it_pad; u_int16_t it_len; /* entire length */ u_int32_t it_present; /* fields present */ };
it_len即为Radiotap的全长。用这个结构体来解析获取原始数据,并跳过it_len,即可到达MAC帧。
MAC帧解析
这个我没有找到具体对应的解析库,但Linux 802_11里面肯定是有的。这里我只提下我自己解析遇到的问题。
我遇到的问题是对控制帧进行解析SSID时遇到的。
由于SSID是变长的,所以我们需要知道SSID_Length。
struct ControlFrame_Body{ uint8_t Timestamp[8]; uint8_t Capability_Info[2]; uint8_t Listen_Interval[2]; uint8_t Element_ID; uint8_t SSID_Length;};
最开始由于错误的资料,我将Element_ID这个Byte也合到了SSID_Length里面,导致经常会获取错误的SSID。
只有Element_ID为0时,后面的SSID_Length才代表SSID的长度,才代表本帧可以解析出SSID。
当Element_ID为其他值时,后面的有其他含义(如国家等)。
对于其他具体帧的分析,下面的博文会有很大帮助。
http://blog.csdn.net/wuyinghao59/article/details/52171715
就到这里吧,对数据的分析其实没什么难度。
对了,PCAP会把错误的帧也捕捉到,所以需要进行一些数据的清洗。比如无法用Radiotap解析的,解析错误的,RSSI为0或为正的,都需要将该帧抛弃。
- Openwrt WIFI探针开发【二】
- Openwrt WIFI探针开发【一】
- Openwrt WIFI探针开发【三】
- openwrt上wifi探针的实现----mt7620a+rt2860v2
- WIFI 探针原理
- 什么是WiFi 探针技术?
- 什么是WiFi探针?
- wifi探针基本概念
- ESP8266 WiFi探针 MAC
- 什么是WIFI 探针?WIFI 探针的用途有哪些?
- 基于rt2860v2的wifi探针
- 基于OpenWRT开发(二)
- OpenWrt 开发 (二) 搭建开发环境
- Android WiFi开发 (二)Wifi热点
- [Openwrt 项目开发笔记]:Openwrt必要设置(二)
- 中科爱讯串口WiFi探针TZ001使用方法
- 中科爱讯WiFi探针TZ002使用配置方法
- 中科爱讯WiFi探针TZ006配置和使用方法
- dell xps13如何快速锁定Fn键
- POJ
- 第十届acm省赛-F-Binary to Prime
- 做个简单的公告栏
- LeetCode 35. Search Insert Position
- Openwrt WIFI探针开发【二】
- 3、一个简单的Windows下的socket程序
- 得到APP之订阅专栏《5分钟商学院》和《薛兆丰的北大经济学课》目录
- 4、WSAStartup()函数以及DLL的加载
- 设置python的默认编码为utf8
- C#事件
- 5、使用socket()函数创建套接字
- [WIP]PROJECT-FUN
- 6、使用bind()和connect()函数