2012-04-12 86 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); 
    

參考文獻:

相關問題