使用libpcap停止捕获数据并将其保存在文件中

时间:2012-04-12 22:56:07

标签: c++ c libpcap

我正在使用带有c ++的libpcap。我想将捕获保存到文件中,我使用它:

  if ((pcount = pcap_loop (p, -1, &pcap_dump, (char *) pd)) < 0)
    {
      pcap_perror (p, prestr);
   }

如何在需要时停止捕获并保存数据?

感谢。

1 个答案:

答案 0 :(得分:3)

问题的两个部分:如何停止以及如何保存。让我们轮流处理每一个。

  1. 如何“停止”捕获

    简而言之:您不会“停止”捕获 - 您捕获的数量有限,并检查是否足够。

    pcap documentation表示第二个参数是要捕获的数据包数。通过指定-1,您告诉系统捕获直到错误。

    如果您要检查某些其他条件(例如,系统其他部分设置的变量),则pcap_loop参数-1可能不合适。 pcap文档中的其他选项看起来更合适:

    • pcap_next只会获取下一个数据包,因此您可以在每个数据包之后进行检查,或者

    • pcap_dispatch将处理一批数据包

    鉴于您正在尝试保存输出,pcap_dispatch可能是更好的选择。如下所示:

    while (something_tells_me_to_keep_going) {
        // process one buffer-full (error handling removed for brevity)
        pcap_dispatch(p, -1, &pcap_dump, (char*) pd);
        // possibly update something_tells_me_to_keep_going, based on time or whatever
    }
    
  2. 如何保存数据

    您已指定回调处理程序pcap_dump,该处理程序用于将数据包数据转储到先前使用pcap_dump_open打开的文件。因此,在您致电pcap_loop(或pcap_dispatch)之前,您可能已经(或将需要)此类内容:

        pcap_dumper_t *pd = pcap_dump_open(p, "my_save_file.pcap");
    

    ...其中p是您使用pcap_t*等创建的pcap_open_live流。

    (参见libcap作者的this注释,明确使用此功能)。

    最后,完成后,请使用以下命令关闭文件:

    pcap_dump_close(pd);
    
  3. 参考文献:

相关问题