我正在使用libpcap和C++。我想將捕獲保存到一個文件,我用這個:使用libpcap停止捕獲數據並將其保存在文件中
if ((pcount = pcap_loop (p, -1, &pcap_dump, (char *) pd)) < 0)
{
pcap_perror (p, prestr);
}
如何我可以停止捕獲和保存數據時,我想?
感謝。
我正在使用libpcap和C++。我想將捕獲保存到一個文件,我用這個:使用libpcap停止捕獲數據並將其保存在文件中
if ((pcount = pcap_loop (p, -1, &pcap_dump, (char *) pd)) < 0)
{
pcap_perror (p, prestr);
}
如何我可以停止捕獲和保存數據時,我想?
感謝。
你的問題的兩個部分:如何停止,以及如何保存。讓我們依次處理每個問題。
如何「停止」捕獲
簡而言之:你沒有「停止」捕獲 - 您捕獲量有限,並檢查是否這就足夠了。
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
}
如何保存
你指定的回調處理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);
參考文獻: