2010-08-06 144 views
2

我试图保存libpcap格式的这个文件的输出,虽然文件确实被保存并且正确的数据被写入它,Wireshark无法打开它。任何人都可以看到我在这里失踪的内容谢谢。pcap_dump文件没有被Wireshark打开

// opening the device here to listen 
    handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf); 
    unsigned int dlt = DLT_EN10MB; 
    pcap_set_datalink(handle,dlt); 


    FILE *filename; 
    filename = fopen("/workarea/capture","a+"); 

    pcap_dumper_t * dump = NULL; 

// opens the file 
dump = pcap_dump_open(handle, (const char *)filename); 

pcap_loop(handle,-1,my_callback,(unsigned char *)filename); 

return (0); 
} 


void my_callback(u_char *dump,const struct pcap_pkthdr* pkthdr,const u_char *packet) 
    { 
    unsigned int i=0; 
    pcap_dump(dump,pkthdr,packet); 

    } 

回答

3

您对pcap_dump_open呼叫似乎并不正确。它传递一个FILE *指针,但应该传递一个文件名。使用pcap_dump_fopen作为FILE指针。或者继续使用pcap_dump_open,只需传递文件名即可。

+0

+1。请参阅http://www.manpagez.com/man/3/pcap_dump_open/ – 2010-08-06 23:53:14

+0

谢谢马克。这照顾了它。 dump = pcap_dump_open(handle,“/ tmp/sniff.pcap”); pcap_loop(handle,-1,&pcap_dump,(char *)dumper); – ZionKing 2010-08-07 19:29:14

+0

当你在它的时候,*请*检查'pcap_dump_open()'是否返回空指针;如果它返回一个空指针,该文件有*未*成功打开/创建写入,并且该程序将无法工作。 *不要*认为可能失败的呼叫不会失败。 – 2015-12-04 20:10:47