wifi探针的实现和部分代码说明
原理简介:
在wifi设备进行连接时,probe request帧是手机,电脑,平板等设备发出的请求帧,这个帧属于管理帧的分组。
通过分析请求帧我们可知道,请求帧的subtype == 0x04
,其中包括mac地址信息。设备搜索热点时发送的探求信号,在一些新设备中,为了隐藏自己的真实mac地址,采用的是发送伪mac地址的探求信号,所以在探求帧中是无法获取真实的mac地址。一些老设备中没有此类功能,所以可以采集到真实的mac地址。响应帧subtype==0x05
,同样包含mac地址信息。同样如此,基站向伪mac地址回应设备,所以统一无法获得真实的mac地址信息。在设备接入基站的过程中,需要进行关联请求也可称为认证,在此过程中,设备所发射的帧中所包含的mac头地址中真实的mac地址,因此我们可以在此过程中获取真实的mac信息。
通过分析请求帧我们可知道,请求帧的subtype == 0x00
,其中包括mac地址信息。同样还存在一个关联响应帧,subtype==0x01
.
贴上部分代码:
Makefile:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=WiFi _detect
PKG_VERSION:=1.1
PKG_RELEASE:=1
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=utils
CATEGORY:=Utilities
TITLE:=WiFi _detect
DEPENDS:=+libpcap +libpthread
MAINTAINER:=LNStar
endef
define Package/Scaner/description
WiFi _detect
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/WiFi _detect/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/Scaner $(1)/bin/
endef
$(eval $(call BuildPackage,WiFi _detect))
数据包解析代码:
struct ieee80211_radiotap_iterator iter;
if (ieee80211_radiotap_iterator_init(&iter, (struct ieee80211_radiotap_header *)packet, ((struct ieee80211_radiotap_header *)packet)->it_len, NULL))
{
continue;
}
header = (i3e_header *)(packet + le16toh(((struct ieee80211_radiotap_header *)packet)->it_len));
header->fc = le16toh(header->fc);
u_char type = (header->fc & 0x0c) >> 2;
u_char stype = (header->fc & 0xf0) >> 4;
Packet_Info Info;
Packet_Info_Init(&Info);
switch (type)
{
case 0x00:
{
if (stype == 0x04 || stype == 0x05 || stype == 0x08) //probe request /resp
{
struct ControlFrame_Body Body;
memcpy(&Body, (uint8_t *)header + 24, sizeof(struct ControlFrame_Body));
Body.SSID = (uint8_t *)header + 38;
if (Body.Element_ID == 0)
{
Body.SSID_Length > 32 ? Body.SSID_Length = 32 : Body.SSID_Length;
char *ESSID = (char *)malloc(Body.SSID_Length + 1);
memcpy(ESSID, Body.SSID, Body.SSID_Length);
ESSID[Body.SSID_Length] = 0;
Info.ESSID = ESSID;
}
}
}
case 0x02:
{
memcpy(Info.Source_Mac.MAC_SLICE, header->sa, 6);
memcpy(Info.Target_Station_Mac.MAC_SLICE, header->da, 6);
break;
}
http post 请求代码:
char *List_Element_To_Str(List *pList)
{
extern unsigned char mac_addr[6];
int Str_Length = 0;
char Flag = 0;
Node *pCurrent = pList->Header;
/***************Fill the Request Body***************/
char *pBody = (char *)malloc(sizeof(char) * pList->Num * 45 + 45);
Str_Length = sprintf(pBody, "{\"node\":\"%x:%x:%x:%x:%x:%x\",\"nearby\":[", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
while (pCurrent)
{
Str_Length += sprintf(pBody + Str_Length, "{\"mac\":\"%x:%x:%x:%x:%x:%x\",\"rssi\":%d},",
pCurrent->Key.MAC_SLICE[0], pCurrent->Key.MAC_SLICE[1], pCurrent->Key.MAC_SLICE[2],
pCurrent->Key.MAC_SLICE[3], pCurrent->Key.MAC_SLICE[4], pCurrent->Key.MAC_SLICE[5],
pCurrent->RSSI / pCurrent->RSSI_Counter);
pCurrent = pCurrent->Next;
Flag = 1;
}
pBody[Flag ? Str_Length - 1 : Str_Length] = ']';
pBody[Str_Length++] = '}';
pBody[Str_Length] = 0;
/***************Here comes to add Header*************/
const char *HttpHeader = "POST /mac/post HTTP/1.1\r\nHost: xxxxxxxx.com\r\nContent-Type: text/plain\r\nAccept: */*\nAccept-Encoding: deflate, br\r\nConnection: close\r\nContent-Length:";
int pBody_Length = strlen(pBody), pBody_Request_Length = 1;
for (; pBody_Length /= 10; pBody_Request_Length++)
; //Get the length of i to string
int pStr_Length = strlen(pBody) + strlen(HttpHeader) + pBody_Request_Length + 4;
char *pStr = (char *)malloc(pStr_Length + 1);
Str_Length = sprintf(pStr, "%s%d\r\n\r\n%s", HttpHeader, Str_Length, pBody);
pStr[Str_Length] = 0;
free(pBody);
if (Str_Length != pStr_Length)
{
printf("Str_Length:%d,pStr_Length:%d,pList_Num:%d\r\n", Str_Length, pStr_Length, pBody_Request_Length);
printf("%s\r\n", pStr);
exit(1);
}
return pStr;
}
具体代码,可联系本人。
qq:739980123
wifi探针的实现和部分代码说明相关推荐
- openwrt上wifi探针的实现
openwrt上wifi探针的实现 探针是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不 ...
- ESP8266开发之旅 应用篇⑤ WiFi探针
文章目录 1.前言 2. WiFi探针 2.1 WiFi探针是什么 2.2 WiFi探测特点 2.3 探针技术原理 3. ProbeRequest管理帧 3.1 MAC Head 3.1 Frame ...
- wifi探针Android系统下的实现思路
原理 WiFi 探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启 WiFi 的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFi,WiFi探针就能够识别用户的信 ...
- WIFI探针初体验,我们的隐私是如何泄露的
初入探针 仅供参考,禁止用于违法途径!! 今年315曝光的无线探针盒子,博主很感兴趣,于是托朋友关系买了一块(实际上就一esp+),到手之后却完全不知道如何下手,于是经过一番打听发现这玩意是有后台管理 ...
- 基于WIFI探针的商业大数据分析系统(hadoop+spark+hbase+bootstrap+echarts)
WIFI_BussinessBigDataAnalyseSystem 基于WIFI探针的商业大数据分析技术(纪念大学最后一次中软杯) 距离我参加"中国软件杯"时间已经过了半年,很多 ...
- Openwrt WIFI探针开发【一】
2017.9.26 公开源码(Apache2.0协议) https://github.com/769484623/WiFiProbe --------------------------------- ...
- ESP8266 WiFi探针 MAC
当一个设备给另外一个设备通过无线传输技术发送信息时,周围的其他同类设备都是能够收到这些信息的,WiFi探针技术就是基于这个原理.具体来说,只要一个WiFi设备在WiFi探针的侦听范围内,当这个WiFi ...
- Wi-Fi 探针 - 智能探针 - 探针盒子 -> 危害用户信息安全
Wi-Fi 探针 - 智能探针 - 探针盒子 -> 危害用户信息安全 Wi-Fi 探针 - 智能探针 - 探针盒子自动收集消费者信息,危害用户信息安全.一定要注意关闭手机 Wi-Fi,不要轻易信 ...
- 中科爱讯WiFi探针在客流分析统计的应用
基于WiFi探针的特性,可以在顾客无感知的情况下采集到手机的MAC地址,用于线下商业统计人流量.客流量. 在客流统计应用方面,WiFi探针可以作为一个独立的产品存在,同时也可以配合视频客流作为视频客流 ...
最新文章
- Udacity机器人软件工程师课程笔记(一)-样本搜索和找回-基于漫游者号模拟器
- Nginx 源码编译安装
- [产品设计]为什么目前的运动手表的产品设计是错的?
- 不会被计算机打败的棋类游戏,电脑首次打败人类围棋冠军意味着什么?
- 为什么 Java 中 2*(i*i) 比 2*i*i 更快?
- java结构体系_java io结构体系
- mysql注册成功为啥启动不了mysql_mysql启动不成功的解决方法
- OpenCV中直方图对比
- Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
- Oracle数据库的增删改操作介绍
- Numpy 排序(sorting)、查询(searching)、计数(counting)
- 合成孔径成像算法与实现_(转)解读:为什么热成像测体温有时会显示35度以下?...
- jquery各种事件使用方法总结(from:天宇之游)
- 按钮按一下画个直线_直线导轨数控车床概念和作用
- pdf reference官方指南之-图片
- win7 计算机 工具,win7小工具
- Android篮球计分器课程设计,篮球计分器课程设计详解.doc
- 《Redis视频教程》(p2)
- 汇编语言-字符串大写转小写,小写转大写
- C语言程序——摄氏度和华氏度之间的转换