读取pcap捕获文件崩溃

时间:2013-08-21 11:53:43

标签: c++ libpcap

尝试从捕获文件中逐个读取数据包:

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 个答案:

答案 0 :(得分:0)

根据this WinPcap page的文件:

  

pcap_next_ex使用指向标题的指针和下一个捕获数据包的数据填充pkt_header和pkt_data参数(请参阅pcap_handler())。

这意味着您只需要第二个和第三个参数的单个指针(不是指针指针),但是您传递了这些指针的地址。然后,该函数将指针值设置为指向它返回的附加信息。所以你的代码是这样的:

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

答案 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)