停止使用libpcap捕获数据并将其保存到文件中 我用C++来处理LIPPCAP。我想将捕获保存到文件中,并使用以下方法: if ((pcount = pcap_loop (p, -1, &pcap_dump, (char *) pd)) < 0) { pcap_perror (p, prestr); } if((pcount=pcap_循环(p,-1,&pcap_转储,(char*)pd))

停止使用libpcap捕获数据并将其保存到文件中 我用C++来处理LIPPCAP。我想将捕获保存到文件中,并使用以下方法: if ((pcount = pcap_loop (p, -1, &pcap_dump, (char *) pd)) < 0) { pcap_perror (p, prestr); } if((pcount=pcap_循环(p,-1,&pcap_转储,(char*)pd)),c++,c,libpcap,C++,C,Libpcap,如何在需要时停止捕获并保存数据 谢谢。您的问题分为两部分:如何停止和如何保存。让我们依次处理每个问题 如何“阻止”捕获 简言之:你不会“停止”捕获-你捕获了有限的数量,并检查这是否足够 指示第二个参数是要捕获的数据包数。通过指定-1,您告诉系统捕获错误 如果您要检查某些其他条件(例如,由系统的其他部分设置的变量),那么参数为-1的pcap\u loop可能不合适。pcap文档中的其他选项看起来更合适: pcap\u next将只抓取下一个数据包,因此您可以在每个数据包之后进行检查,或者 pca

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


谢谢。

您的问题分为两部分:如何停止和如何保存。让我们依次处理每个问题

  • 如何“阻止”捕获

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

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

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

    • pcap\u next
      将只抓取下一个数据包,因此您可以在每个数据包之后进行检查,或者

    • pcap\u dispatch
      将处理一批数据包

    考虑到您正试图保存输出,
    pcap\u 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
    }
    
  • 如何保存数据

    您已经指定了回调处理程序
    pcap\u dump
    ,该处理程序用于将数据包转储到以前使用
    pcap\u dump\u open
    打开的文件中。因此,在调用
    pcap\u loop
    (或
    pcap\u dispatch
    )之前,您可能已经(或将需要)类似的东西:

    。。。其中
    p
    是您使用
    pcap\u open\u live
    等创建的
    pcap\u t*

    (请参阅libcap作者的注释,说明此函数的用法)

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

    pcap_dump_close(pd);
    
  • 参考资料:

    pcap_dump_close(pd);