尝试从捕获文件中逐个读取数据包:
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 :(得分: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)