C++ 将数据包附加到当前PCAP文件

C++ 将数据包附加到当前PCAP文件,c++,pcap,libpcap,tcpdump,packet-sniffers,C++,Pcap,Libpcap,Tcpdump,Packet Sniffers,我编写了以下代码来捕获数据包;但是,它实际上保存了最后一个数据包 process_数据包(const struct pcap_pkthdr*头, 常量u_char*数据包) { FILE*pFile=NULL; pFile=fopen(“myfile.pcap”,“wb”);//打开以二进制模式写入 pcap_转储程序_t*dumpfile=pcap_转储文件(pcap_句柄,pFile); if(dumpfile==NULL) { printf(“***nooo Dump!!!!!!!***”

我编写了以下代码来捕获数据包;但是,它实际上保存了最后一个数据包

process_数据包(const struct pcap_pkthdr*头,
常量u_char*数据包)
{
FILE*pFile=NULL;
pFile=fopen(“myfile.pcap”,“wb”);//打开以二进制模式写入
pcap_转储程序_t*dumpfile=pcap_转储文件(pcap_句柄,pFile);
if(dumpfile==NULL)
{
printf(“***nooo Dump!!!!!!!***”);
}
其他的
{
pcap_转储((无符号字符*)转储文件、头、数据包);
printf(“***倾倒!!!!!!!***”);
}
pcap_转储_关闭(转储文件);
}
我想写一个代码来收集数据包并将新数据包附加到以前的数据包中。
我应该说,
fopen(“…”,“ab”)
会破坏文件并且无法工作。

pcap\u dump\u fopen会写入一些初始化头,因此应该只对空文件调用一次。在创建了带有头的文件之后,您实际上将以追加模式打开的文件*实例传递到pcap_dump,并直接转换为未签名字符*。但这并不是一种安全的方法——最好至少自己编写所有必需的字段(至少有10行),因为函数实现将来可能会改变,文件格式也不会改变。我真的不明白你们为什么要在每个被丢弃的包上重新打开文件。如果要确保所有数据都已写入,只需调用fflush即可