чтение сбоя файла захвата pcap

пытается прочитать один за другим пакеты из файла захвата:

pcap_t *  structure = pcap_open_offline(file, errbuf)

а потом

pcap_pkthdr** hdr=new (pcap_pkthdr*);
const u_char** data=NULL;
while(pcap_next_ex(structure, hdr, data) == 1)
{.....}

таким образом, pcap_next_ex падает с ядром

Program terminated with signal 11, Segmentation fault.
[New process 7928]
(gdb) bt
0x0804a038 in pcap_fakecallback ()
0x08057ac4 in pcap_offline_read ()
0x0804ae19 in pcap_next_ex ()
0x08049b3d in main () at ..

Есть идеи? Спасибо!

2

Решение

Согласно документации на эта страница WinPcap:

pcap_next_ex заполняет параметры pkt_header и pkt_data (смотрите pcap_handler ()) указателями на заголовок и данные следующего захваченного пакета.

Это означает, что вам нужен только один указатель (не указатель на указатель) для второго и третьего параметров, но вы передаете адрес этих указателей. Затем функция устанавливает значения указателя для указания на дополнительную информацию, которую она возвращает. Итак, ваш код будет выглядеть примерно так:

pcap_pkthdr* hdr;
const u_char* data;
while(pcap_next_ex(structure, &hdr, &data) == 1)
{ ... }
0

Другие решения

Вам необходимо передать хранилище для pcap_pkthdr, чтобы pcap_next_ex мог хранить там данные.

Кроме того, pcap_next_ex установит указатель данных для указания на пакетные данные,
который внутренне хранит библиотека pcap (поэтому место, на которое указывает указатель данных
будет действительным только до тех пор, пока вы снова не вызовете pcap_next_ex.)

Вам нужно сделать это:

pcap_pkthdr hdr;
const u_char* data=NULL;
while(pcap_next_ex(structure, &hdr, &data) == 1)
0

По вопросам рекламы [email protected]