C pcap заголовок 802.11 - PullRequest
       51

C pcap заголовок 802.11

1 голос
/ 13 ноября 2011
 struct mgmt_header_t {
    u_int16_t   fc;     /* 2 bytes */
    u_int16_t   duration;   /* 2 bytes */
    u_int8_t    da[6];      /* 6 bytes */
    u_int8_t    sa[6];      /* 6 bytes */
    u_int8_t    bssid[6];   /* 6 bytes */
    u_int16_t   seq_ctrl;   /* 2 bytes */
};

void my_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
    //printf("********* New Packet Arrived *********\n");
    //printf("Jacked a packet with length [%d]\n", header->len);    

    struct mgmt_header_t *mac_header = (struct mgmt_header_t *) (packet+24);
    if (mac_header->fc > 255 )
        printf("comon");

Я знаю, что mac_header находится в нужном месте, потому что я получаю от него mac-адреса, и они верны, но проблема в том, что fc никогда не превышает 255, поэтому всегда левый байт равен нулю

ОБНОВЛЕНИЕ:


Думаю, я понял это прямо сейчас, спасибо за парня и Отта - для справки вот мой полный пример http://pcap -wireless.blogspot.com / 2011/11/post-2-80211-mac-header.html

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

Цитировать раздел 7.1.1 «Условные обозначения» IEEE Std 802.11-2007 :

На рисунках все биты в полях пронумерованы, от 0 до k, гдедлина поля k + 1 бит.Границы октетов в поле можно получить, взяв номера битов поля по модулю 8. Октеты в числовых полях, которые длиннее одного октета, отображаются в порядке возрастания значимости, от бита с наименьшим номером до бита с наибольшим номером.Октеты в полях длиннее одного октета отправляются в PLCP по порядку от октета, содержащего биты с наименьшим номером, до октета, содержащего биты с наибольшим номером.

"Октеты в полях, длина которых превышаетодин октет отправляется в PLCP по порядку от октета, содержащего биты с наименьшим номером, до октета, содержащего биты с наибольшим номером. "означает, что поля передаются в маленьком -андийском порядке, а не большом -андийском порядке.Поэтому 16-битное поле со значением 0x0080 будет передаваться как октет (байт) со значением 0x80, за которым следует октет со значением 0x00.

Это означает, что в шестнадцатеричном дампе Wiretap вы 'Посмотрим 80 00, но это означает 0x0080, а не 0x8000.

Кстати, обратите внимание, что заголовок radiotap не гарантированно имеет длину 24 байта;заголовок содержит поле длины (с прямым порядком байтов), определяющее длину заголовка.

0 голосов
/ 13 ноября 2011

Первые 8 бит поля fc или ноль, когда это запрос на ассоциацию.Но разве вы не пропускаете заголовок, присваивая (пакет + 24)?Можете ли вы добавить hexdump первых 32 байтов пакета?

...