Openwrt WIFI探针开发【一】
2017.9.26
公开源码(Apache2.0协议)
—————————————————————————————————————————————————————
在学校断断续续做了一年多的Openwrt WIFI探针,从刚开始磕磕绊绊,国内几乎没有公开的资料的情况下入手到最后能够较完整得到几乎所有需要的数据,期间确实是很辛劳。
我选用的方案是:
PCAP库
RADIOTAP解析库
PCAP库作用为将WIFI模式切换为监听模式同时进行抓包原始数据获取。
RADIOTAP库作用为得到RSSI、频率等比较底层的信息,同时进行一些错误数据的抛弃。
下面开始讲解PCAP库的使用。
在本机安装PCAP并完成Makefile编写
安装这个不多说了,直接在Openwrt上获取并安装PCAP也是可以的,或者选择像我一样在交叉编译过程中在gcc 最后加上 -static 静态连接上。
下面是我使用的解决方法:
$(CC) $(LDFLAGS) XX.o -o XX -lpcap -static
- 1
关于Openwrt Makefile的编写与对应IPK的生成,网络上有很多说明,不再赘述。
PCAP的使用
char errbuff[PCAP_ERRBUF_SIZE];
pcap_t *device = pcap_open_live(argv[1], 8000, 1, 0, errbuff);//(1)
if (!device)
{
printf("error: pcap_open_live(): %s\n", errbuff);
exit(1);
}
if (pcap_set_rfmon(device, 1) == 0)//(2)
{
printf("can't enter rfmode\n");
exit(1);
}
printf("Scaning starts\n");
pcap_loop(device, -1, getPacket, &i); //Scaning starts//(3)
pcap_close(device);
PS:
(1)argv[1]为网卡名字,如wlan0这样。8000为获取数据大小,1这里将网卡设置为混杂模式,0为无超时等待,errbuf意义如名字。
(2)pcap_set_rfmon,这个是将网卡设置为监听模式的函数,省去了调用iw 等系统程序的调用。
(3)pcap_loop,获取到了数据之后便调用getPacket函数。 getPacket函数应该简洁,并尽可能短 ,我工程实现中使用队列(可存32帧)来存储待分析的数据,发现队列基本一直处于满或者快满的状态,说明底层传上来的数据速度比分析速度快,同时观测发现系统占用60%的CPU,Usr占用只有区区18%。
下面为调用函数的原型。
void getPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet);
packet这个就是获取到的数据。具体分析方法后面会具体说明。
Openwrt WIFI探针开发【一】的更多相关文章
- openwrt上wifi探针的实现
openwrt上wifi探针的实现 探针是通过wifi搜集经过这个AP范围的手机的mac地址,没有什么深刻的东西,知乎上关于这个东西讨论的很多,有人觉得很有用,可以做很多增值的应用,有人觉得没啥用,不 ...
- openwrt上wifi探针的实现----mt7620a+rt2860v2
openwrt上wifi探针的实现----mt7620a+rt2860v2 [摘要:甚么是wifi探针 看到探针,感到很矮小上的模样,实在便是经过wifi汇集经由那个AP局限的脚机的mac地点,出有甚 ...
- 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制
安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程? 详细代码介 ...
- 转 如何用mt7620方案的rt2860v2驱动实现wifi探针功能,网上能搜到一些方法,但是讲的好模糊?
原文:http://www.zhihu.com/question/33559283 如何用mt7620方案的rt2860v2驱动实现wifi探针功能,网上能搜到一些方法,但是讲的好模糊? 如何用mt7 ...
- wifi探针的使用说明.
我使用的是四博智联提供的WIFI探针 DT-06产品 点击打开链接 1. 数据读取 可以直接通过串口即可读取数据,串口波特率设置为 115200,其它选项默认. 如果需要PC机测试,请使用杜邦线转接到 ...
- WIFI探针技术
1.WIFI 探针定义 WIFI 探针是一种能够主动识别 Android 和 IOS 设备,感知用户行为轨迹的精准数据收集前端,基于 WIFI探测技术.移动互联网和云计算等先进技术自动识别探针附近的智 ...
- Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
源: Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
- OpenWRT - WEB界面开发思路和基本方法
想要对OpenWRT的WEB界面(*下称界面)进行修改.修改的目标是: 1.修改页面的样式,设计为企业的风格(stylesheet) 2.新建自己的功能,实现 访问页面后,用户就可以对配置文件(也就是 ...
- 微信小程序wifi控制开发
小程序wifi控制开发方案 ----- 由小程序通过公众号给wifi控制板进行配网,后台服务器自动生成设备名并注册在数据库中,wifi控制板自动保存生成的设备名,小程序可读取WIFI控制板的数据,控制 ...
随机推荐
- ArrayList中重复元素处理方法.[Java]
1.使用HashSet删除ArrayList中重复的元素 private static void sortByHashSet() { ArrayList<String> listWithD ...
- bzoj 1131 简单树形dp
思路:随便想想就能想出来啦把... 卡了我一个vector... #include<bits/stdc++.h> #define LL long long #define fi firs ...
- Java List转换为字符串的几种方法
Java List转换为字符串的几种方法 import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import ...
- elementUI 学习入门之 radio 单选框
Radio 单选框 基础用法 选项默认可见,选项不宜过多,选项过多建议使用 select 选择器 使用 Radio 组件,需要设置 v-model 绑定变量,选中意味着变量的值为相应 Radio l ...
- HDU 6183 Color it
线段树. 假设只有一种颜色,因为每次询问有一个$x$一定是$1$,那么我可以想办法找出每一个$y$最小的$x$是多少,如果最小的都不符合,那么一定不符合,因为更新变成了单点更新,询问是区间询问最小值, ...
- properties文件乱码问题 eclipse
java最常用的开发工具eclipse里面的properties配置文件里面打开中文是乱码的,解决方式很简单. 将default encoding 设置为utf-8即可. 效果: 漂亮!!!
- http1.0和1.1的区别
1.HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理 HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器 ...
- JVM的内存结构,JVM的回收机制
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...
- Redis学习篇(四)之List类型及其操作
Redis的List是一个双向链表 LPUSH 作用:向列表左端添加元素 语法:LPUSH key value value... 从左到右逐个添加到左端,前面的先添加, 可以一次添加多个元素 RPUS ...
- FastReport.Net使用:[36]"续表"
1. RepeatedBand的打印和子报表的使用. RepeatedBand实现方法:设置Band为每页重复.注意,从第二次打印开始,就是重复打印了.第一次打印不认为是RepeatedBand. 报 ...