libpcap捕获的信标框架很奇怪

时间:2013-11-29 16:54:36

标签: c linux libpcap wlan

我用库libpcap(Ubuntu,c)

捕获了信标帧

我改变了wlan模式以通过以下函数调用来监视和捕获

// 3000 is large enough number for test
pcd = pcap_open_live(dev,3000,PROMISCUOUS,-1,errbuf)  
// filter with "wlan type mgt subtype beacon"    
pcap_compile(pcd,&bpg,"wlan type mgt subtype beacon",1,PCAP_NETMASK_UNKNOWN)
pcap_setfilter(pcd, &bpg)

以下是packet_view

void packet_view(
    unsigned char *user,
    const struct pcap_pkthdr *h,
    const unsigned char *p
){
    int len;
    len = 0;

    printf("PACKET\n");
    while(len < h->len) {
        printf("%02x ", *(p++));
        if(!(++len % 16))
            printf("\n");
    }
    printf("\n");
    return ;
}

我得到了以下结果(最重要的32位)

00 00 12 00 2e 48 00 00 00 02 6c 09 a0 00 bb 01 
00 00 80 00 00 00 ff ff ff ff ff ff 00 08 9f bf 

但是......实际上信标帧必须从位“08”开始 因为信标帧的协议版本= 00 type = 00和subtype = 1000 =&gt; 00001000(08)

我用00启动数据包的原因是什么?我用“wlan type mgt subtype beacon”过滤了吗?

2 个答案:

答案 0 :(得分:3)

您错过了一次pcap通话 - 拨打pcap_datalink()

除非pcap_datalink()返回DLT_IEEE802_11,否则数据包 NOT 以802.11标头开头。例如,如果它返回DLT_IEEE802_11_RADIO,则数据包以radiotap header开头,并且后面有一个802.11标头;看起来像你的数据包。

有关值pcap_datalink()可以返回的值以及pcap和pcap-ng文件中显示的值,请参阅the tcpdump.org link-layer header types page

答案 1 :(得分:0)

将过滤器设置为 &#34;链接[0] == 0x80&#34; 适合我!

显然 https://wiki.wireshark.org/CaptureFilters

在没有信标的情况下捕获WLAN流量: link [0]!= 0x80