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探针可以作为一个独立的产品存在,同时也可以配合视频客流作为视频客流 ...
最新文章
- skype安卓手机版_危险的战争游戏安卓手机版下载-危险的战争下载v1.0.13
- Java基础教程,第三讲,运算符 变量定义 数据类型转换
- 微软停止与华为合作:Windows暂停供应新订单
- 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
- HDU - 5919 Sequence II
- 《 产品设计思维:电商产品设计全攻略》一一2.3 电子商务的存在形态
- 【python】Python基础语法及规范
- 【干货】华为企业数字化转型之道.pdf(附下载链接)
- 现实世界的Windows Azure:采访Gizmox 研发中心的副总裁Itzik Spitzen先生
- 服务器控制台网页登录,云服务器管理控制台登录网站
- ngix请求转发配置
- 解决VS 2017/2019社区版无法登陆的方法
- Spark学习总结(一)
- dell服务器面板不显示,戴尔服务器控制提示面板没有安装怎么处理
- 蓝牙(BLE)自动配对
- flume 从基础到高阶
- 英语说话方式的一点儿心得
- sql server 2014 使用sql清理日志(简单方便)
- conexant hd audio音频驱动
- 别了,指纹打卡!今后考勤可以刷脸了
热门文章
- 墙裂推荐的AUTOSAR科普介绍
- 函数发生器与计算机电路,模电课程设计(压控函数发生器).ppt
- Object、Function、String、Array原生对象扩展方法
- fx系列微型可编程控制器 通信_三菱可编程控制器 Q 系列 CPU 模块介绍
- java P1319 压缩技术
- 华为p8刷linux系统,华为手机变身交通卡,公交地铁都能刷
- 谣言检测文献阅读四—Reply-Aided Detection of Misinformation via Bayesian Deep Learning
- cuda nvcc版本不一致_显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
- kafka消息系统-Net开发库的使用与选择
- 关于建立时间与保持时间的本质