OpenWrt下WiFi无线指标的提取(MAC地址、RSSI等)

实验平台如下:

路由器型号:TP-LINK TL-WR703N v1
OpenWrt版本:Chaos Calmer 15.05.1

##前言:

802.11帧有三种,管理帧、控制帧,数据帧。每种类型帧又分很多种“子帧”。手机WIFI开启扫描热点、连接热点的过程主要涉及管理帧。

当我们的手机扫描周边WiFi热点时,会发出一种probe_request的帧(它是管理帧的一种,其中包含了手机的MAC地址),遍历空间所有信道,等待AP返回Probe Response帧。

这个交互过程中,终端到各AP的信号强度值是一清二楚的,从而可以采用RSSI等方式来定位。也就是说只要你手机终端开启了Wi-Fi,在后台它是会与空间内的AP发生一次或反复的帧听与响应,这些可以帧听,基本暴露了你在空间的大致位置了。

通过这种方式,WiFi热点亦可扫描并收集周围的AP信号,无论是否加密,是否已连接,甚至信号强度不足以显示在无线信号列表中,都可以获取到AP广播出来的MAC地址。


##一、基本原理
利用工作在monitor模式的无线网卡可以探测到所有经过它的数据流,在AP端使用无线网卡抓取AP与AP、AP与STA之间的MAC层管理数据包,然后对抓取的MAC帧进行实时解包,提取所需要的Timestamp、MAC address、RSSI等信息,并将其存入服务器数据库中,用于后续的wifi定位、链路分析等。


##二、获取周围wifi强度的两种方法:

###1、抓取AP与AP之间的MAC层管理数据包

OpenWrt路由器无线网卡工作于AP模式,无需连接周围wifi,通过以下指令即可监听到它们的MAC地址、RSSI强度等信息。

如何在Linxu程序内部嵌入shell终端指令并获取该指令的输出结果。请参考 此处

iw dev wlan0 scan | egrep "^BSS|singal"//参考注释[4]

最终效果:在703N路由器测试最快速度为 0.8秒以上,此外获得的RSSI不稳定,浮动较大,不适合做控制,故寻找第二种方法。

原因分析:此条语句执行时,会将周围所有的 wifi热点的MAC层管理数据包都捕获进来,然后再挨个解包、提取,这个过程将花费相当长时间,造成读取线程堵塞。

###2、抓取AP与STA之间的MAC层管理数据包
OpenWrt路由器无线网卡工作于AP模式并作为Master路由器,其它路由器作为Client,连上该AP,即可通过下列指令查看所有连入该AP的客户端的信息。

iw dev wlan0 station dump | egrep "Station|singal:"//参考注释[5]
//iw wlan0 station get 40:b0:fa:c1:75:41//查看单个路由器信息

最终效果:在703N路由器测试最快速度为 28ms,获得的RSSI较为稳定,实时性也满足要求。


##参考文章:
[1] wifi关键数据提取
[2] Linux使用tcpdump抓获取WIFI包
[3] Linux系统无线网络抓包程序(分析手机WIFI MAC地址)
[4] 实战无线网络分析(篇一)无线监听
[5] How to get RSSI in a linux AP (iw station dump doesn’t work)

																		@本文作者:LeathreWang
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值