2

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

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 ..

有任何想法吗?谢谢!

4

2 回答 2

0

根据此 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)
{ ... }
于 2013-08-22T19:57:24.937 回答
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)
于 2013-08-22T20:43:28.073 回答