zoukankan      html  css  js  c++  java
  • Openwrt WIFI探针开发【一】

    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
    • 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
    ", errbuff);
            exit(1);
        }
        if (pcap_set_rfmon(device, 1) == 0)//(2)
        {
            printf("can't enter rfmode
    ");
            exit(1);
        }
        printf("Scaning starts
    ");
        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这个就是获取到的数据。具体分析方法后面会具体说明。

  • 相关阅读:
    安卓开发之ListAdapter(二)
    两listview联动
    不要天真了,这些简历HR一看就知道你是培训的,质量不佳的那种
    天真!这简历一看就是包装过的
    一线城市为何难逃离,职场饭局正在“失宠”?
    腾讯架构师分享的Java程序员需要突破的技术要点
    百度最穷程序员现身,工作4年晒出存款后,网友:你是真穷!
    震惊微软!招程序员的流程居然...
    python基础认识(一)
    input修改placeholder文字颜色
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/7786649.html
Copyright © 2011-2022 走看看