Openwrt WIFI探针开发【一】
来源:互联网 发布:美工提成怎么算 编辑:程序博客网 时间:2024/05/21 17:42
2017.9.26
公开源码(Apache2.0协议)
https://github.com/769484623/WiFiProbe
—————————————————————————————————————————————————————
在学校断断续续做了一年多的Openwrt WIFI探针,从刚开始磕磕绊绊,国内几乎没有公开的资料的情况下入手到最后能够较完整得到几乎所有需要的数据,期间确实是很辛劳。
我选用的方案是:
PCAP库
RADIOTAP解析库
PCAP库作用为将WIFI模式切换为监听模式同时进行抓包原始数据获取。
RADIOTAP库作用为得到RSSI、频率等比较底层的信息,同时进行一些错误数据的抛弃。
下面开始讲解PCAP库的使用。
在本机安装PCAP并完成Makefile编写
安装这个不多说了,直接在Openwrt上获取并安装PCAP也是可以的,或者选择像我一样在交叉编译过程中在gcc 最后加上 -static 静态连接上。
下面是我使用的解决方法:
$(CC) $(LDFLAGS) XX.o -o XX -lpcap -static
关于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探针开发【三】
- openwrt上wifi探针的实现----mt7620a+rt2860v2
- WIFI 探针原理
- 什么是WiFi 探针技术?
- 什么是WiFi探针?
- wifi探针基本概念
- ESP8266 WiFi探针 MAC
- 什么是WIFI 探针?WIFI 探针的用途有哪些?
- 基于rt2860v2的wifi探针
- OpenWRT(一)开发环境搭建
- 基于OpenWRT开发(一)
- OpenWrt开发(一)序
- 中科爱讯串口WiFi探针TZ001使用方法
- 中科爱讯WiFi探针TZ002使用配置方法
- 中科爱讯WiFi探针TZ006配置和使用方法
- 中科爱讯双WiFi探针TZ007操作及配置
- leetcode583. Delete Operation for Two Strings
- First Unique Character in a String
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- [Android] RecyclerView滑动没有惯性效果
- [系统操作][grub4dos]引导硬盘映像文件
- Openwrt WIFI探针开发【一】
- Invalid character constant
- c++string类型管理
- STL中优先队列(priority_queue)的相关操作
- JVM_0.5_小故事
- Java NIO 总结
- Redis学习笔记1 事务
- java内部类学习笔记
- easyui的datagrid自适应排版