【发布时间】:2019-06-27 10:53:58
【问题描述】:
我想使用 libpcap 在多个特定接口(不是“任何”)上捕获同一个文件
我有以下代码(错误处理和一些参数被删除):
static gpointer pkt_tracing_thread(gpointer data)
{
while (1)
{
pcap_dispatch(g_capture_device1, .., dump_file1);
pcap_dispatch(g_capture_device2, .., dump_file2);
}
}
fp1 = calloc(1, sizeof(struct bpf_program));
fp2 = calloc(1, sizeof(struct bpf_program));
cap_dev1 = pcap_open_live(interface1,...
cap_dev2 = pcap_open_live(interface2,...
pcap_compile(cap_dev1, fp1, ...
pcap_compile(cap_dev2, fp2, ...
pcap_setfilter(cap_dev1, fp1);
pcap_setfilter(cap_dev2, fp2);
dump_file1 = pcap_dump_open(g_capture_device1, filename);
dump_file2 = pcap_dump_open(g_capture_device2, filename);
g_thread_create_full(pkt_tracing_thread, (gpointer)fp1, ...
g_thread_create_full(pkt_tracing_thread, (gpointer)fp2, ...
这不起作用。我在文件名中看到的只是其中一个接口上的数据包。我猜上面的代码中可能存在线程问题。
我已经阅读了https://seclists.org/tcpdump/2012/q2/18,但我仍然不清楚。
我读到 libpcap 不支持以 pcapng 格式写入,这是上述工作所必需的,尽管我不清楚为什么。
有什么方法可以捕获多个接口并将它们写入同一个文件?
【问题讨论】:
标签: libpcap