2012-04-12 83 views

回答

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_open_live创建pcap_t*流等

    (请参阅libcap作者的说明this说明使用此功能)。

    最后,当您完成后,关闭该文件与:

    pcap_dump_close(pd); 
    

参考文献:

相关问题