我正在使用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);
参考文献: