2013-11-29 3 views
0

я захватил кадр маяка с библиотекой Libpcap (Ubuntu, с)сигнальный кадр захватывается Libpcap что-то странное

Я изменил 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" , потому что версия протокола Beacon кадра = 00 тип = 00 и подтип = 1000 => 00001000 (08)

, что является причиной того, что я начался пакет с 00? althougt, я фильтровал с помощью «wlan type mgt subtype beacon» ??

+0

этих "бит" являются "байт" –

+0

ах. Я просто ошибаюсь, но ничего не изменилось. – user3050118

ответ

3

Вам не хватает одного вызова pcap - вызов pcap_datalink().

Если pcap_datalink() не возвращается DLT_IEEE802_11, пакет NOT начните с заголовка 802.11. Если, например, он возвращает DLT_IEEE802_11_RADIO, пакет начинается с radiotap header и после него имеет заголовок 802.11; это выглядит так, как у вашего пакета.

См. the tcpdump.org link-layer header types page для получения информации о значениях pcap_datalink() и значениях, которые отображаются в файлах pcap и pcap-ng.

+0

большое спасибо, pcap_datalink() возвращает IEEE802_11_RADIO и после 18 байт с начала я наконец нашел свой маяковый кадр! – user3050118

+1

Не прокладывайте 18 в свою программу; вместо этого, если тип ссылочного уровня - 'DLT_IEEE802_11_RADIO', тогда выберите длину из заголовка radiotap (обратите внимание, что это мало-значный, а не big-endian!) и пропустите это количество байтов. У заголовков радиатора не гарантируется какая-либо фиксированная длина. –

+0

Я использовал два разных адаптера, чтобы обманывать маяковые кадры, используя мой собственный код pcap в C. Один из адаптеров D-LINK не может работать с «истинным» режимом монитора, но он может, используя некоторые усилия, с помощью пользовательского драйвера linux услышать маяк кадров :). Теперь другой, TP-LINK WN722N, можно поместить в режим мониторинга, но мне не удалось нюхать кадры маяка с помощью моего собственного кода (я мог видеть только маяки через wirehark). Но ваш маленький комментарий к «малодушному ... большому концу» спас день! Благодаря!!! –

0

Установите свой фильтр на "link [0] == 0x80" Работает для меня!

Поскольку, по-видимому https://wiki.wireshark.org/CaptureFilters

Захват WLAN трафика без маяков: связь [0] = 0x80

Смежные вопросы