OpenWRT WiFi添加探针-基于AR71XX平台

本文介绍了如何在OpenWRT基于AR71XX的设备上开发WiFi探针功能,通过监听802.11协议中的Probe Request帧,收集客户端MAC和信号强度,然后通过MQTT上传到后台服务。开发过程涉及内核空间代码的修改,以捕获和传递数据,以及用户空间代码实现与内核空间的通信和数据上传。
摘要由CSDN通过智能技术生成

背景

最近基于OpenWRT开发了WiFi探针的功能,可以实现基本的客户端MAC及客户端的信号强度搜集,搜集结束之后通过MQTT上传至后台服务进行分析,可实现更多的扩展功能,如人流量统计,粗略定位等.
本文描述不涉及后台的分析功能,只是通过路由器提供的AP功能,将搜集到的信息提交给服务后台.
好,正式开始.

开发思路

如果熟悉802.11协议的话,开发思路比较明确了,先上802.11报文格式,如下:

其中Address2为发送端的MAC地址,同时,基于802.11协议的行为模式,802.11协议规定:

  • AP基站每个100ms发送一次信标Beacon帧,用来提供BSS网络基础架构;
  • Station客户端,在WiFi功能开启状态下,每隔一段时间会向附近所有能收到Beacon帧的AP(即使客户端没有链接到AP),发Probe Request报文,基站收到
    此报文后会回应Probe Response报文;

而Probe Request报文属于管理帧(Type=00)的一种,子类型为Probe Request(SubType=0100),了解这些,要实现探针的思路就很明确了.主要分两个步骤:

  • WiFi驱动层,抓取到我们想要的信息(内核空间),通过某种方式传递给用户空间;
  • 用户空间接收到内核空间传递的信息,进行数据的提取及发送到云端;

1.内核空间代码

我使用AR71XX系列设备,其WiFi驱动的源码,在OpenWRT编译之后的build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/compat-wireless-2016-01-10目录下,不同版本可能会有区别,所有收到的WiFi数据包,都会通过net/mac80211/rx.c的__ieee80211_rx_handle_packet函数进行处理,因此检测Probe Request帧就在这里处理,添加代码片段如下:

--- compat-wireless-2016-01-10/net/mac80211/rx.c	2019-07-18 17:43:35.176544318 +0800
+++ compat-wireless-2016-01-10-mod/net/mac80211/rx.c	2019-07-18 16:05:46.538622629 +0800
@@ -31,6 +31,
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值