Openwrt WIFI探针开发【一】

2017.9.26
公开源码(Apache2.0协议)git

https://github.com/769484623/WiFiProbegithub

—————————————————————————————————————————————————————网络

在学校断断续续作了一年多的Openwrt WIFI探针,从刚开始磕磕绊绊,国内几乎没有公开的资料的状况下入手到最后可以较完整获得几乎全部须要的数据,期间确实是很辛劳。
我选用的方案是:函数

PCAP库
RADIOTAP解析库oop

PCAP库做用为将WIFI模式切换为监听模式同时进行抓包原始数据获取。
RADIOTAP库做用为获得RSSI、频率等比较底层的信息,同时进行一些错误数据的抛弃。ui

下面开始讲解PCAP库的使用。spa

在本机安装PCAP并完成Makefile编写

安装这个很少说了,直接在Openwrt上获取并安装PCAP也是能够的,或者选择像我同样在交叉编译过程当中在gcc 最后加上 -static 静态链接上。
下面是我使用的解决方法:code

$(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%。
下面为调用函数的原型。get

void getPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet);

packet这个就是获取到的数据。具体分析方法后面会具体说明。

相关文章
相关标签/搜索