今天,部门经理给我布置了一个工作任务,就是实现WIFI 探针功能,用在我们的项目中去。那么问题来了,先说说什么是WIFI 探针吧!
1. WIFI探针的定义
WiFi 探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启 WiFi 的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFi,WiFi探针就能够识别用户的信息。当我们走进探针信号覆盖区域内且我们的wifi设备打开,我们的设备就能被探针探测出来,无论是IOS或者安卓系统都能轻易检测到,并且获取设备的MAC地址。有以下几个特点:1. 用户无需参与,无需连接到网络
2. Android , IOS全兼容
3. 自动探测区域内手机MAC地址
4. 手机,平板均能探测
要一个WiFi设备在WiFi探针的侦听范围内,当这个WiFi设备(无论是终端、路由器或者其他WiFi设备)发送任何一帧(Frame)时,不管是发给谁,探针都能截获,并分析出此帧MAC层与物理层的一些信息,比如发送与接收设备的MAC地址、帧类型、信号强度等。对于周围的WiFi设备来说,探针是透明的。探针不需要与周围的设备有任何交互,其本身不需要发出任何WiFi信号。
WiFi探针其实就是一个AP,它定时的向自己的四周广播发送Beacon帧,用来通知附近的WiFi设备,AP是存在的,(好比它一直在向周围喊着,我在这里,大家快来连接我啊)。 我们的WiFi设备,手机,平板电脑等,也不停的发送着probe帧,去寻找附近可用的AP。在probe帧的介绍中就我们可以看到probe帧包含了设备的mac地址,当我们的AP接收到probe帧之后就获取了这个设备的MAC地址,而这个AP就是我们的WIFI探针。因此只要在WiFi探针覆盖区域内的设备打开着WiFi,探针就能收集到他的MAC地址。
最初,人们往往是通过改装路由器AP来增加探针功能,但效果不理想。一是会影响AP的上网性能,二是其提供的探针在功能与性能上都不是很好,比如,只能侦听特定的帧或者特定信道等。现在,好的探针都是独立工作的。
探针的主要用途是统计与分析周围的WiFi设备。随着智能手机的普及,WiFi探针也部署得越来越多。只要手机的WiFi开着,不管有没有连接热点,都可以被探针探测到。当然,大家也不用担心个人隐私被偷走了。探针只能知道手机WiFi的MAC地址以及其他MAC层的信息,包括目标MAC、传输信道、帧类型、信号强度、所连接的热点名称等;而手机号码与上网的具体信息(包括QQ号、微信号等),光靠探针是获取不到的,除非在很特殊的情况下。另外,现在的一些手机为了不被探针抓取到自己的MAC地址,在一些情况下会使用随机的伪MAC地址。
2.Beacon桢的定义
BeaconFrame:信标帧,是相当重要的维护机制,主要来宣告某个AP网络的存在。定期发送的信标,可让移动WiFi设备得知该网络的存在,从而调整加入该网络所必要的参数。在基础网络里,AP必须负责发送Beacon帧,Beacon帧所及范围即为基本服务区域。 在基础型网络里,所有沟通都必须通过接入点,因此WiFi设备不能距离太远,否则无法接收到信标。下图是帧格式:
3.Probe桢的定义
Probe 桢:探测请求帧,WiFi设备将会利用Probe Request帧,扫描所在区域内目前有哪些802.11网络。下图是帧格式:
那么问题来了,什么是802.11网络呢,各位看官请看下面
WiFi采用的是IEEE802.11协议集,此协议集包含许多子协议。其中按照时间顺序发展,主要有:(1)802.11a,(2)802.11b, (3)802.11g(4)802.11n。在网络通信中,数据被封装成了帧,帧就是指通信中的一个数据块。但是帧在数据链路层传输的时候是有固定格式的,不是随便的封装和打包就可以传输,大小有限制,最小46字节,最大1500字节所以我们必须按照这个规则来封装。下面802.11的帧结构:
从上面的结构可以知道,前俩个字节为:帧控制字段。
控制字段的前2bit节为:协议类型,目前此值为:0。
1)控制帧:(Control Frame,例如RTS帧、CTS帧、ACK帧)用于竞争期间的握手通信和正向确认、结束非竞争期等;
2)管理帧:(Management Frame,例如Beacon帧、Probe Request帧)主要用于STA与AP之间协商、关系的控制,如关联、认证、同步等;
3)数据帧:(Data Frame,承载数据的载体)用于在竞争期和非竞争期传输数据。