Я хотел бы использовать libpcap для захвата на нескольких определенных интерфейсах (не 'any') в один и тот же файл
У меня есть следующий код (обработка ошибок и некоторые аргументы удалены):
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, который необходим для работы вышеупомянутого, хотя я не понимаю, почему.
Есть ли способ перехватить несколько интерфейсов и записать их в один и тот же файл?