2013-08-21 51 views
2

试图从捕获文件中读取一个接一个数据包:阅读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 .. 

有什么建议吗?谢谢!

+0

捕获文件存在,那么“结构”指针不为NULL –

+2

我想你需要'pcap_pkthdr * HDR; const u_char * data; while(pcap_next_ex(structure,&hdr,&data)== 1){...}'但我无法测试,因此不想发布为答案。 – tinman

+0

@tinman **你是对的**,它从pcap_next_ex()返回。非常感谢!我不知道如何将你的评论标记为答案。 –

回答

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) 
{ ... } 
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)