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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse里做JBPM工作流gpd.xml中文乱码问题解决(包括控制台乱码解决)

该文章转至:http://jsczxy2.iteye.com/blog/1236552 修改eclipse安装跟目录下的eclipse.ini文件&#xff0c;在其中添加&#xff1a;-Dfile.encodingUTF-8如我添加后为&#xff1a;-showsplashorg.eclipse.platform--launcher.XXMaxPermSize256M-vmargs-Dosgi.requiredJavaVers…

irq4中断子程序c语言写法,AVR汇编程序参考

该AVR的汇编程序选自《M128》&#xff0c;程序中体现了AVR汇编的基本特点&#xff0c;仅供大家参考。该应用系统为一个带1/100秒的简易24小时制时钟&#xff0c;它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。图 简易24小时时钟硬件原…

技术的自我修炼

从今天开始记录自己的技术修炼之路&#xff0c;自勉成长&#xff01;转载于:https://blog.51cto.com/11822609/1796121

一步一步学Silverlight 2系列(6):键盘事件处理

一步一步学Silverlight 2系列&#xff08;6&#xff09;&#xff1a;键盘事件处理 概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对J…

STM32堆栈溢出的问题

在程序中出现栈溢出的情况&#xff0c;就是分配局部变量时因为内存溢出而重启&#xff0c;局部变量分配在栈中&#xff0c;栈区域满了导致溢出&#xff0c;需要修改startup_stm32f10x_hd.s中&#xff0c;或startup_stm32f10x_ld.s,startup_stm32f10x_md.s,具体文件按要看CPU是否…

块分割,维特比算法小结

学习总结 在ER中&#xff0c;有一类算法依靠参考结构化数据库的模型实现&#xff0c;以便提高ER的速度。但是这类算法常常在运行中产生了大量重复计算&#xff0c;降低了效率。由此&#xff0c;通过介绍以下方法&#xff0c;来解决这个问题&#xff1a; 块分割 给定的字符串&am…

关于URL编码

一、问题的由来 URL就是网址&#xff0c;只要上网&#xff0c;就一定会用到。 一般来说&#xff0c;URL只能使用英文字母、阿拉伯数字和某些标点符号&#xff0c;不能使用其他文字和符号。比如&#xff0c;世界上有英文字母的网址 “http://www.abc.com”&#xff0c;但是没有希…

C语言ffmpeg合并多个视频,ffmpeg合并多个视频

/// ///遍历文件夹获取所有视频路径/// /// private void TraverseFolder(string path,stringfilepath){DirectoryInfo dInfo newDirectoryInfo(path);Dictionary dic new Dictionary();Dictionary dic2 new Dictionary();List list new List();//遍历该文件夹foreach (File…

android应用开发全程实录-实现甩动拨打和挂断电话

今天继续给大家带来《Android应用开发全程实录》中的章节&#xff0c;这部分是讲传感器中的一个实例。 通过上面的例子我们学会了如何获得某种类型的传感器&#xff0c;下面通过一个实例来学习如何使用某一个类型的传感器。我们以加速传感器为例&#xff0c;来实现这样一个功能…

static的应用以及静态与非静态的区别

先前看到一个技术大牛写了一个关于静态成员与非静态成员&#xff0c;静态方法和非静态方法的各自区别&#xff0c;觉得挺好的&#xff0c;在这里写一个小程序来说明这些区别。 package com.liaojianya.chapter5; /*** This program will demonstrate the use of static method.…

Python中抓网页的小陷阱

这边博客已经搬家到这里了。我的个人博客&#xff0c;风格我自己更喜欢&#xff0c;也可以完全控制。当然&#xff0c;会花一点钱&#xff0c;但是基本能承受。 欢迎各位来观光&#xff0c;博客园很棒&#xff0c;但是有一个自己能控制的网站也许会更好。另外&#xff0c;不能发…

C# 打印文件

http://support.microsoft.com/kb/322091转载于:https://www.cnblogs.com/xbgz/p/3431463.html

c语言穷举算法 枚举法,c语言枚举法 穷举法 ppt课件

枚举法 穷举法 笨人之法 把所有可能的情况一一测试 筛选出符合条件的各种结果进行输出 分析 这是个不定方程 三元一次方程组问题 三个变量 两个方程 x y z 1005x 3y z 3 100设公鸡为x只 母鸡为y只 小鸡为z只 百元买百鸡问题分析 x y z 1005x 3y z 3 100 三重循环 voidmain intx…

装饰模式(Decorator pattern)

装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能&#xff0c;是继承关系的一个替代方案。 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之&#xff0c;客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰…

恶补sql知识(一)

索引的定义 SQL Server的索引值是对数据库中一个或者多个列的值进行排序的结构。 索引几个特性&#xff1a; 1&#xff09;索引可以提高数据的访问速度 只有在适当的位置建立索引&#xff0c;就能大幅度提高,实际上&#xff0c;您可以把索引理解为一种特殊目录。微软的SQL SERV…

php连接数据库输出的中文几个字就…

我们首先假设数据库中采用的编码为UTF-8 这时我们在PHP页面中应当首先添加 "Content-Type" content"text/html; charsetutf-8" />文件保存时的编码类型也必须是utf-8。 之后在数据库查询前添加 mysql_query("set names utf8");注&#xff1a;…

android开启服务器配置,Android基于XMPP开发(一)【openfire服务器配置】

OpenFireOpenFire 是采用Java开发的基于XMPP(Jabber)协议&#xff0c;开源实时协作(RTC)服务器。Smack 是用 Java编 写的XMPP客户端代码库&#xff0c;是 spark 的核心开源界总是有许多有趣的东东&#xff0c;这三个合起来就是一个完整的XMPP IM 实现。OpenFire ——服务器端Sp…

Python 生成器 迭代器

1.1 生成器通过列表生成式&#xff0c;我们可以直接创建一个列表。但是&#xff0c;受到内存限制&#xff0c;列表容量肯定是有限的。而且&#xff0c;创建一个包含100万个元素的列表&#xff0c;不仅占用很大的存储空间&#xff0c;如果我们仅仅需要访问前面几个元素&#x…

寻路基本工具类定义 AIDefine.cpp

1 #include "AIDefine.h" 2 3 PointI AI_FindHelpPoint[8] {PointI(-1,0),PointI(0,-1),PointI(1,0),PointI(0,1),PointI(-1,-1),PointI(1,-1),PointI(1,1),PointI(-1,1)}; 转载于:https://www.cnblogs.com/liusijian/p/3438542.html

android相对布局代码,Android基础_3 Activity相对布局(示例代码)

相对布局要比前面讲的线性布局和表格布局要灵活一些&#xff0c;所以平常用得也是比较多的。相对布局控件的位置是与其周围控件的位置相关的&#xff0c;从名字可以看出来&#xff0c;这些位置都是相对的&#xff0c;确定出了其中一个控件的位置就可以确定另一个控件的位置了。…