Используйте libpcap для захвата нескольких интерфейсов в один файл - PullRequest
0 голосов
/ 27 июня 2019

Я хотел бы использовать 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, который необходим для работы вышеупомянутого, хотя я не понимаю, почему.

Есть ли способ перехватить несколько интерфейсов и записать их в один и тот же файл?

...