openwrt上wifi探针的实现

openwrt上wifi探针的实现

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

看到探针,感觉很高大上的样子,其实就是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不过这并不妨碍我们从技术上去实现它。

802.11协议

协议里面要求每个AP每隔一定时间(几十毫秒到几秒不等)向周围的sta和AP广播beacon帧,就是告诉周围的sta和其他的AP:我是xxxx(bssid),快来连我!我是xxxx(bssid),快来连我!瞬间感觉每个AP都有一颗放荡的心,有木有!有木有!

每 个sta(可以理解为手机、笔记本)除了默默监听周边AP发送的beacon帧以外,还会偷偷发送probe帧:我是xxxx(mac地址),我能连你 吗?我是xxxx(mac地址)我能连你吗?十足一个闷骚的小婊砸,所以我每次出门都默默关掉手机的wifi,现在的无线环境实在是太不安全了,参看连接

在7620a上的实现

基本思路是在AP受到探测帧后,将mac地址记录下来,通过proc文件系统上报给应用层。下面是代码:

mac地址获取部分:

在函数VOID APPeerProbeReqAction(IN PRTMP_ADAPTER pAd,IN MLME_QUEUE_ELEM *Elem);中添加

extern UCHAR GLOBAL_AddrLocalNum;

extern UCHAR GLOBAL_AddrLocal[ADDR_LOCAL_NUMBER][MAC_ADDR_LEN];
PFRAME_802_11 pFramelxd = (PFRAME_802_11)Elem->Msg;
if(GLOBAL_AddrLocalNum >ADDR_LOCAL_NUMBER || GLOBAL_AddrLocalNum == ADDR_LOCAL_NUMBER)
{
//GLOBAL_AddrLocalNum = 0;
}
else
{
int index = 0;
BOOLEAN flag = 1;
for(index=0; index<GLOBAL_AddrLocalNum; index++)
{
if(NdisCmpMemory(GLOBAL_AddrLocal[index],pFramelxd->Hdr.Addr2,MAC_ADDR_LEN)==0)
{
flag = 0;
break;
}
}
//COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr1);
//GLOBAL_AddrLocalNum++;
//COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr2);
//GLOBAL_AddrLocalNum++;
if(flag)
{
COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr2);
GLOBAL_AddrLocalNum++;
}
}

proc部分:

应用层向proc的节点中写入“s”,告知驱动需要获取sta相关的数据,驱动给出采集到的maclist。

static struct proc_dir_entry *entry_wl_beacon_mac;

UCHAR GLOBAL_AddrLocalNum = 0;
UCHAR GLOBAL_AddrLocal[MAX_MCAST_LIST_SIZE][6];

static char *maclistbuffer;

static int maclist_proc_show(struct seq_file *m, void *v)
{
if(maclistbuffer[0] == ‘s‘)
{
maclistbuffer[0] = ‘0‘;
int index=0;
for(index=0;index<GLOBAL_AddrLocalNum;index++)
{
seq_printf(m,"%02x:%02x:%02x:%02x:%02x:%02x\n",

GLOBAL_AddrLocal[index][0],GLOBAL_AddrLocal[index][1],GLOBAL_AddrLocal[index][2],GLOBAL_AddrLocal[index][3],GLOBAL_AddrLocal[index][4],GLOBAL_AddrLocal[index][5]);
}
GLOBAL_AddrLocalNum = 0;
}
else
{
//seq_printf(m,"sta number is %d, proc!\n", GLOBAL_AddrLocalNum);
//seq_printf(m,"ap number is %d, proc!\n", GLOBAL_AddrLocalNum1);
}
return 0;
}
static int maclist_proc_open(struct inode *inode, struct file *file)
{
return single_open(file,maclist_proc_show,inode->i_private);
}

static ssize_t maclist_proc_write(struct file *file, const char *buffer, size_t len, loff_t *off)
{
int user_len = 0;

if (len > MAX_MACLIST_LENGTH)
{
user_len = MAX_MACLIST_LENGTH;
}
else
{
user_len = len;
}
if(copy_from_user(maclistbuffer, buffer, user_len))
{
return -EFAULT;
}
return user_len;
}

时间: 2024-10-13 00:52:48

openwrt上wifi探针的实现的相关文章

openwrt上wifi探针的实现----mt7620a+rt2860v2

openwrt上wifi探针的实现----mt7620a+rt2860v2 [摘要:甚么是wifi探针 看到探针,感到很矮小上的模样,实在便是经过wifi汇集经由那个AP局限的脚机的mac地点,出有甚么深入的器械,知乎上闭于那个器械接头的良多,有人认为很有效,能够] 什么是wifi探针 看到探针,感觉很高大上的样子,其实就是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不过这并不妨碍我们

【转载】openwrt上wifi探针的实现----mt7620a+rt2860v2

本文转载网址: http://www.aiuxian.com/article/p-1989767.html 什么是wifi探针 看到探针,感觉很高大上的样子,其实就是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不过这并不妨碍我们从技术上去实现它. 802.11协议 协议里面要求每个AP每隔一定时间(几十毫秒到几秒不等)向周围的sta和AP广播beacon帧,就是告诉周围的sta和其他的

WiFi探针的原理与安全

随着WiFi市场爆发, WiFi探针技术在各个领域的应用也逐渐增多,那么我们来下解析看似高端神秘的WiFi探针的技术原理. 要了解探针技术,首先我们需要先认识下WiFi使用的网络协议,WiFi采用的是IEEE802.11协议集,此协议集包含许多子协议.其中按照时间顺序发展,主要有: (1)802.11a, (2)802.11b, (3)802.11g (4)802.11n,. 在网络通信中,数据被封装成了帧,帧就是指通信中的一个数据块.但是帧在数据链路层传输的时候是有固定格式的,不是随便的封装和

网络安全之揭露WiFi探针查个人隐私的真正元凶

在上周五播出的3.15晚会上,央视报道了使用WiFi探针功能可以窃取用户隐私的事件,引发了不少人的恐慌.其实,WiFi探针技术本无偷窃个人隐私的功能,手机里乱装的第三方app才是出卖用户数据的元凶. WiFi探针/app/数据泄露 安全 WiFi探针不能获取个人信息 许多网友们现在还是搞不清WiFi探针是什么.其实,WiFi探针是依附于无线AP等WiFi发射设备中的一种功能.比如,我们在商场.餐馆.咖啡厅等公共场合连接WiFi网络时,WiFi探针就能够探知我们手中设备的MAC地址. 每台设备的M

用shell脚本实现linux系统上wifi模式(STA和soft AP)的转换

转载请注明出处:http://blog.csdn.net/hellomxj1/ 功能:在linux系统上实现wifi STA与AP功能的转换 实现成果:1.添加wifi密码账户add_wifi_account: 2.wifi两种模式启动的脚本wifi_start: 3.帮助信息README_WIFI_START: 具体实现过程如下: 添加wifi密码账户add_wifi_account 1 #!/bin/sh 2 3 echo "Add Wifi Account ..." 4 5 if

OpenWrt 上搭建代理服务器squid

想上网,且不受外部限制方法很多,VPN, DNS Proxy, 这次给大家介绍一下Web Proxy.我选的是Squid代理服务器,这款之前就有想研究的冲动, 苦于一直没有时间. 准备: OpenWrt上编译 #make menuconfig ->Network->Web Proxy->Squid. #make 烧写固件 网络拓扑图如下 一切都进展的很顺利. 到了下面就是特别苦恼的事情了,你会遇到千奇百怪的问题,全因一纸squid.conf, 这个配置文件整对了,你离成功也就不远了. 文

OpenWRT上判断客户端在线个数

有两种方式: 一.通过DHCP client分配列表 (缺点:client列表会根据超时时间刷新,一般超时时间为12h,) 二.通过arp缓存列表/proc/net/arp(缺点:arp刷新时间默认为30s,这个时间的误差可以接受.) 主要讲解第二种方法: Flags: 0x0是找不到这台主机了. 0x2是主机还在线. IP address HW type Flags HW address Mask Device 192.168.235.1 0x1 0x2 00:01:41:80:e3:e9 *

手机连上wifi热点后自动弹窗的功能

使用buildroot编译bind DNS服务器 用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常用的udhcpc,tftp,apache,lighttpd,php等.. 1. 到buildroot目录下执行make ARCH=arm menuconfig (1)配置CPU参数 little endian 指的是小端存储: 二进制格式是ELF: CPU是Cortex-A5: 交叉工具支持eabi

Openwrt上mysql innodb的使用及相关异常情况

首先在menuconfig中配置mysql,具体是在Utilities->database->mysql-server.这样直接编译就可以了,不过这样默认是不支持innodb存储引擎的,估计是考虑openwrt一般是运行的硬件有关,不需要这么复杂的存储引擎(占用空间也比MyISAM存储引擎大).但是,如果需要支持innodb存储引擎该怎么办?这类型的网上帖子不多,我是之前参照国外的论坛加自己测试得出的. Openwrt支持innodb存储引擎 修改feeds/oldpackages/libs/