原理简介:

在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探针的实现和部分代码说明相关推荐

  1. openwrt上wifi探针的实现

    openwrt上wifi探针的实现 探针是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不 ...

  2. ESP8266开发之旅 应用篇⑤ WiFi探针

    文章目录 1.前言 2. WiFi探针 2.1 WiFi探针是什么 2.2 WiFi探测特点 2.3 探针技术原理 3. ProbeRequest管理帧 3.1 MAC Head 3.1 Frame ...

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

    原理 WiFi 探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启 WiFi 的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFi,WiFi探针就能够识别用户的信 ...

  4. WIFI探针初体验,我们的隐私是如何泄露的

    初入探针 仅供参考,禁止用于违法途径!! 今年315曝光的无线探针盒子,博主很感兴趣,于是托朋友关系买了一块(实际上就一esp+),到手之后却完全不知道如何下手,于是经过一番打听发现这玩意是有后台管理 ...

  5. 基于WIFI探针的商业大数据分析系统(hadoop+spark+hbase+bootstrap+echarts)

    WIFI_BussinessBigDataAnalyseSystem 基于WIFI探针的商业大数据分析技术(纪念大学最后一次中软杯) 距离我参加"中国软件杯"时间已经过了半年,很多 ...

  6. Openwrt WIFI探针开发【一】

    2017.9.26 公开源码(Apache2.0协议) https://github.com/769484623/WiFiProbe --------------------------------- ...

  7. ESP8266 WiFi探针 MAC

    当一个设备给另外一个设备通过无线传输技术发送信息时,周围的其他同类设备都是能够收到这些信息的,WiFi探针技术就是基于这个原理.具体来说,只要一个WiFi设备在WiFi探针的侦听范围内,当这个WiFi ...

  8. Wi-Fi 探针 - 智能探针 - 探针盒子 -> 危害用户信息安全

    Wi-Fi 探针 - 智能探针 - 探针盒子 -> 危害用户信息安全 Wi-Fi 探针 - 智能探针 - 探针盒子自动收集消费者信息,危害用户信息安全.一定要注意关闭手机 Wi-Fi,不要轻易信 ...

  9. 中科爱讯WiFi探针在客流分析统计的应用

    基于WiFi探针的特性,可以在顾客无感知的情况下采集到手机的MAC地址,用于线下商业统计人流量.客流量. 在客流统计应用方面,WiFi探针可以作为一个独立的产品存在,同时也可以配合视频客流作为视频客流 ...

最新文章

  1. skype安卓手机版_危险的战争游戏安卓手机版下载-危险的战争下载v1.0.13
  2. Java基础教程,第三讲,运算符 变量定义 数据类型转换
  3. 微软停止与华为合作:Windows暂停供应新订单
  4. 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
  5. HDU - 5919 Sequence II
  6. 《 产品设计思维:电商产品设计全攻略》一一2.3 电子商务的存在形态
  7. 【python】Python基础语法及规范
  8. 【干货】华为企业数字化转型之道.pdf(附下载链接)
  9. 现实世界的Windows Azure:采访Gizmox 研发中心的副总裁Itzik Spitzen先生
  10. 服务器控制台网页登录,云服务器管理控制台登录网站
  11. ngix请求转发配置
  12. 解决VS 2017/2019社区版无法登陆的方法
  13. Spark学习总结(一)
  14. dell服务器面板不显示,戴尔服务器控制提示面板没有安装怎么处理
  15. 蓝牙(BLE)自动配对
  16. flume 从基础到高阶
  17. 英语说话方式的一点儿心得
  18. sql server 2014 使用sql清理日志(简单方便)
  19. conexant hd audio音频驱动
  20. 别了,指纹打卡!今后考勤可以刷脸了

热门文章

  1. 墙裂推荐的AUTOSAR科普介绍
  2. 函数发生器与计算机电路,模电课程设计(压控函数发生器).ppt
  3. Object、Function、String、Array原生对象扩展方法
  4. fx系列微型可编程控制器 通信_三菱可编程控制器 Q 系列 CPU 模块介绍
  5. java P1319 压缩技术
  6. 华为p8刷linux系统,华为手机变身交通卡,公交地铁都能刷
  7. 谣言检测文献阅读四—Reply-Aided Detection of Misinformation via Bayesian Deep Learning
  8. cuda nvcc版本不一致_显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
  9. kafka消息系统-Net开发库的使用与选择
  10. 关于建立时间与保持时间的本质