如何在c中同时读写pcap文件

时间:2016-08-12 12:05:52

标签: c pcap libpcap

我有两个用C语言编写的程序,一个程序写入pcap文件,第二个程序同时读取它。对于写入,我使用以下代码

while(j < 100000)
        {
            pcount = pcap_dispatch(p,2000,&pcap_dump,(u_char *)pd);
            j = j+pcount;
            printf("Got %d packets , total packets %d\n",pcount,j);
        }

为了解码数据包,我使用以下代码

while( (returnValue=pcap_next_ex(pcap,&header,&data)) >= 0)
        {
            printf("Packet # %d ",++packetCount);
            printf("return value %d\n",returnValue);
        }

当我单独运行程序时,即当我停止写入pcap文件时,它会完美地解码数据包。但是当我同时运行两个程序时,解码器不会解码所有数据包。如果我得到100个数据包,解码器将只显示50-60个解码数据包。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

在我看来,只要作者在pcap文件中写入,读者的文件就不会得到更新。这可能是由于读取器文件指针未刷新的原因,即读取文件的非更新版本。 希望它会对你有所帮助。

答案 1 :(得分:0)

这就是管道的用途。我建议像

这样的东西
pcap_writer -w - | tee permanent-file.pcap | pcap_reader -r -

其中pcap_writerpcap_reader是您的计划。通过这种方式,您可以根据需要创建可以以不同方式组合的内容。