【问题标题】:How to read and write concurrently a pcap file in c如何在c中同时读取和写入pcap文件
【发布时间】:2016-08-12 20:28:28
【问题描述】:

我有 2 个用 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 个解码数据包。

任何帮助将不胜感激。

【问题讨论】:

    标签: c pcap libpcap


    【解决方案1】:

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

    【讨论】:

    • 你是对的,但是我如何更新阅读器的文件指针以匹配作者的文件指针?
    【解决方案2】:

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

    pcap_writer -w - | tee permanent-file.pcap | pcap_reader -r -
    

    pcap_writerpcap_reader 是您的程序。通过这种方式,您可以创建可以根据需要以不同方式组合的东西。

    【讨论】:

    • 基本上我已经在编写器程序中制作了 pcap 文件,所以我无法理解如何通过管道传输另一个 pcap 文件,因为我正在编写自己的 pcap 文件(使用我自己的嗅探器),该文件一直在更新
    • 写入标准输出而不是文件。然后,您可以使用 tee 将输出通过管道传输到文件,并将其发送到您的阅读程序。
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2012-08-31
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多