【问题标题】:Append Packet to Current PCAP file将数据包附加到当前 PCAP 文件
【发布时间】:2014-10-18 20:35:15
【问题描述】:

我写了下面的代码来抓包;但是,它实际上保存了最后一个数据包。

    process_Packet(const struct pcap_pkthdr *header,
                  const u_char * packet)
    {
        FILE* pFile = NULL;
        pFile = fopen ("myfile.pcap" , "wb"); // open for writing in binary mode
        pcap_dumper_t * dumpfile = pcap_dump_fopen(pcap_handle,pFile);
        if (dumpfile == NULL)
        {
            printf("***NOOOO Dump!!!!!!!***");
        }
        else
        {
            pcap_dump((unsigned char *) dumpfile, header, packet);
            printf("***Dumped!!!!!!!***");
        }
        pcap_dump_close(dumpfile);
    }

我想编写一个代码来收集数据包并将新数据包附加到以前的数据包。 我应该说fopen("...", "ab") 损坏了文件并且不起作用。

【问题讨论】:

    标签: c++ pcap libpcap tcpdump packet-sniffers


    【解决方案1】:

    pcap_dump_fopen 会写入一些初始化头文件,因此它应该只在空文件上调用一次。在创建带有标题的文件后,您实际上 can 将以附加模式打开的 FILE* 实例传递给 pcap_dump,直接转换为 unsigned char *。但这不是安全的方法 - 最好至少自己编写所有必需的字段(无论如何都像 10 行),因为将来函数实现可能会改变,而文件格式不会改变。而且我真的不明白您为什么要在每个转储的数据包上重新打开文件。如果你想确保所有数据都被写入,你可以调用 fflush。

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 2011-11-26
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多