openwrt上wifi探针的实现
openwrt上wifi探针的实现
看到探针,感觉很高大上的样子,其实就是通过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;
}
openwrt上wifi探针的实现相关推荐
- OpenWrt之上wifi探针简单实现
之前一直在rt2860v2上面做探针数据捕获和试验,并没有基于社区的驱动做过,应该也不是特别麻烦,netlink可以沿用以前的,只要找到802.11驱动里面帧解析的地方就可以了,直接通过netlink ...
- Openwrt WIFI探针开发【一】
2017.9.26 公开源码(Apache2.0协议) https://github.com/769484623/WiFiProbe --------------------------------- ...
- linux wifi探针,Openwrt WIFI探针开发
2017.9.26 公开源码(Apache2.0协议) https://github.com/769484623/WiFiProbe --------------------------------- ...
- WiFi探针信息了解
前年十月安卓的功能做的差不多了,领导安排做 openwrt 上的 WiFi 探针功能,真是什么都不懂,先学 Linux,再看C语言,接着弄虚拟机编译 openwrt 固件,刷机,了解 WiFi 探针信 ...
- ESP8266 WiFi探针 MAC
当一个设备给另外一个设备通过无线传输技术发送信息时,周围的其他同类设备都是能够收到这些信息的,WiFi探针技术就是基于这个原理.具体来说,只要一个WiFi设备在WiFi探针的侦听范围内,当这个WiFi ...
- 中科爱讯WiFi探针在客流分析统计的应用
基于WiFi探针的特性,可以在顾客无感知的情况下采集到手机的MAC地址,用于线下商业统计人流量.客流量. 在客流统计应用方面,WiFi探针可以作为一个独立的产品存在,同时也可以配合视频客流作为视频客流 ...
- WiFi探针的工作原理及采集的数据?
WiFi探针在商业.公共安全领域的大放异彩,更多的人想了解什么是WiFi探针,WiFi探针是怎么工作的? WiFi探针的工作原理? 要深入了解WiFi探针技术,首先先认识WiFi使用的网络协议,WiF ...
- 中科爱讯WiFi探针在贵宾客户提醒领域的应用
很多人很难理解为什么WiFi探针可以应用到贵宾客户提醒领域.在我们收到的诸多需求中,贵宾客户提醒功能是需求中提及较多的. 中科爱讯Wi-Fi探针通过精准的识别贵宾客户的MAC地址,帮助企业快速的知晓贵 ...
- 中科爱讯双频串口WiFi探针TZ5001 产品介绍
中科爱讯WiFi探针TZ-5001支持串口.USB连接上位机(安卓.电脑.平板),可以采集2.4G/5G WiFi数据.配备有Android.PC端免费测试工具.通过抓取2.4G WiFi信号的MAC ...
最新文章
- Python标准库:内置函数tuple([iterable])
- freeglut中提供的几种立体几何对象绘制的android移植
- mysql 常规命令操作_mysql数据库常规命令操作
- Yii 框架学习--01 框架入门
- macOS 10.13 安装Virtualbox失败
- Spark源码分析之Worker
- Tensorflow中卷积的padding操作
- SpringCloud Alibaba Sentinel 流量控制规则介绍与配置
- AI 时代下的海量业务智能监控实践
- SpringBoot2.1.5(18)--- 国际化配置,SpringBoot Locale 国际化使用方法
- 模型相关:修改模型的坐标原点到用户的自定义位置
- 模式识别、机器学习与深度学习
- 51单片机控制42步进电机——程序实现(中断PWM/延时函数)
- Leetcode-845. 数组中的最长山脉(最详细解法)
- 关于PADS 9.5导入CAD图(dxf文件)的说明
- 迭代器的定义与自定义一个迭代器
- Java是先难后易吗_做题先易后难,干活先难后易
- lol最克制诺手的英雄_LOL:对线很“无解”的5个英雄,其实他们都有克星,诺手只怕它!...
- html字体自动变大变小,浏览器上的字体突然变大了或者变小怎么恢复?
- 用于测量纸张卷径的超声波传感器