У меня есть некоторый код, который использует функцию 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
?
Спасибо, Гай, я не уверен, как использовать результат реализации пользовательской земли 'ieee80211_radiotap_iterator_next()'. Но я буду рыть. Я даже не подумал, что будут две параллельные реализации одной и той же функции! –