2013-05-10 7 views
0

У меня есть некоторый код, который использует функцию ieee80211_radiotap_iterator_init() и ieee80211_radiotap_iterator_next() от radiotap-parser.c,Libpcap извлечение заголовка Radiotap

Я не уверен, что я делаю неправильно, возможно, кто-то может просветить меня? Я использую пример кода из the documentation более или менее без изменений, он очень хорошо подходит к тому, что я пытаюсь достичь:

/* where packet is `const u_char *packet' */ 
struct ieee80211_radiotap_iterator rti; 
struct ieee80211_radiotap_header *rth = (struct ieee80211_radiotap_header *) packet; 

/* 802.11 frame starts here */ 
struct wi_frame *fr= (struct wi_frame *) (packet + rth->it_len); 

/* Set up the iteration */ 
int ret = ieee80211_radiotap_iterator_init(&rti, rth, rth->it_len); 

/* Loop until we've consumed all the fields */ 
while(!ret) { 
    printf("Itteration: %d\n", count++); 
    ret = ieee80211_radiotap_iterator_next(&rti); 
    if(ret) { 
    /* 
    * The problem is here, I'm dropping into this clause with 
    * a value of `1` consistently, that doesn't match my platform's 
    * definition of EINVAL or ENOENT. 
    */ 
    continue; 
    } 
    switch(rti.this_arg_index) { 
    default: 
    printf("Constant: %d\n", *rti.this_arg); 
    break; 
    } 
} 

Там же ограниченные возможности для ввернув что-то в этом коде, я думаю, я 'm confused by 1, возвращаемый с ieee80211_radiotap_iterator_next(), который в соответствии с импентацией не выглядит как условие ошибки в the implementation.

Я фильтрую пакеты типа "(type mgt) and (not type mgt subtype beacon)", и я даже не уверен, что если libpcap будет включать эти атрибуты, когда для линии передачи данных установлено значение DLT_IEEE802_11_RADIO?

ответ

1

Первое:

Я фильтрация пакетов типа «(типа МГТ) и (не типа МГТ подтип маяк)», и я даже не уверен в том, Libpcap будет включать в себя эти атрибуты, если для канала передачи данных установлено значение DLT_IEEE802_11_RADIO?

Будет. Код фильтра, сгенерированный для DLT_IEEE802_11_RADIO, выбирает длину заголовка радиосигнала и пропускает заголовок радиотерапии, поэтому он просто пропускает заголовок радиоисточника и проверяет заголовок 802.11 после него.

Второе:

реализация

Вы связаны с двумя различных реализаций ieee80211_radiotap_iterator_next() - the one at radiotap-parser.c, в котором ieee80211_radiotap_iterator_next() возвращает "следующий индекс настоящего Арг" на успех, и the one from the Linux kernel, в котором ieee80211_radiotap_iterator_next() возвращает 0 при успехе. Если вы используете код итератора радиотерапии, который используется в radiotap-parser.c, не обращайте внимания ни на что из ядра Linux, так как он не ведет себя так, как ведет себя тот, который вы используете.

+0

Спасибо, Гай, я не уверен, как использовать результат реализации пользовательской земли 'ieee80211_radiotap_iterator_next()'. Но я буду рыть. Я даже не подумал, что будут две параллельные реализации одной и той же функции! –

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

  • Нет связанных вопросов^_^