wifi探针Android系统下的实现思路

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/sxj159753/article/details/86408977

原理

WiFi 探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启 WiFi 的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFi,WiFi探针就能够识别用户的信息。当我们走进探针信号覆盖区域内且我们的wifi设备打开,我们的设备就能被探针探测出来,无论是IOS或者安卓系统都能轻易检测到,并且获取设备的MAC地址

作者:justinjing
链接:https://www.jianshu.com/p/5d5322ca3b1c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

关于安卓系统中的Wifi探针

本文所说的Android系统,都是高通平台。

安卓系统中的wifi探针,主要可以有两种实现。

  • 一种是通过热点开关来获取周围的 mac地址。
  • 一种是通过wifi的p2p来实现获取周围的mac地址。

Android系统中实现,需要修改Android系统源码。
探针的实现主要是实现底层的探针上报到应用层

首先看一下Android系统wifi相关的架构。

image

转自
https://blog.csdn.net/liuhaomatou/article/details/40398753

更多深入的东西建议阅读邓凡平的
《深入理解Android wifi nfc 和gps》

通过热点开关来获取周围的 mac地址思路

通过开启Android的热点,是可以搜索到周围的mac地址的。
但是Android系统并没有将这些信息进行上报。

通过高通的qpst,可以抓取到相关的log。

修改

vendor\qcom\opensource\wlan

会将底层的mac地址信息发送相关的Event.

在wpa_supplicant中就可以收到相关的mac地址信息。

由于 wpa_supplicant 是通过 wpa_ctrl.h来发送到Android的framework层。

在external\wpa_supplicant_8\hostapd\src\ap\ieee802_11.c进行处理 wpa_ctrl.h进行发送。

framework中
frameworks\base\services\core\java\com\android\server\NetworkManagementService.java
这个是管理网络相关的service 会接收netd的上报。

framework发送到App。
在NetworkManagementService添加接口,编写AIDL。

App调用这个接口,就获取到了mac信息

通过wifi的p2p来实现获取周围的mac地址思路

Wi-Fi Direct是一种点对点连接技术,它可以在两台station之间直接建立tcp/ip链接,并不需要AP的参与。

p2p探针和Ap热点探针?

p2p探针相对于热点Ap获取,对于Android来说,不需要用户开启热点。只需要开启wifi就可以进行获取周围的mac地址。

原理

最关键的是,wifi p2p虽然不是wifi ap模式。wlan dirver会触发相关的探针逻辑发送信息到wpa_supplicant.
到了wpa_supplicant中,进行协议相关的处理。
由于不是热点模式,会相关逻辑的判断,将p2p搜索到的mac地址舍弃。

实现

如果实现p2p探针,也就是将相关的mac地址舍弃的地方进行逻辑修改。向framework发送相关的信息,进而传递到上层APP中。

qpst抓取wlan相关log。 会有mac信息发送相关的event。

此时,并没有走p2p相关的协议代码。此时的mac地址就是正常的mac地址。而不是p2p的mac地址。

要做的是,将此mac地址绕过协议,发送到framework中。

同样的可以通过wpa_cli接口 发送到frmework中。

可以直接添加一个event,发送mac地址到frameworks\opt\net\wifi\service\java\com\android\server\wifi\p2p\WifiP2pServiceImpl.java

WifiP2pServiceImpl通过广播,向App发送信息。
至此app就会收到了信息。

展开阅读全文

没有更多推荐了,返回首页