Как сохранить кадры Ethernet в формате pcap

0

Я пишу приложение, которое слушает сетевой интерфейс, выбирает некоторые кадры, редактирует их, а затем сохраняет их на диск. Очень похоже на tshark и tcpdump.

Мой код написан на C++

Тем не менее, я хочу сохранить свои пакеты в формате pcap, и я не могу найти библиотеку C/C++, которая принимает кадры Ethernet (в памяти) и сохраняет их в файл.pcap.

  • Примечание. Тем временем я использую hexdump и text2pcap, но это неприемлемо для производства

Обновление решения:

#include <pcap.h>

pcap_t* p = pcap_open_dead(DLT_EN10MB, 65535);
const std::string pcap_file_name = getPcapName();
pcap_dumper_t* dumper = pcap_dump_open(p, pcap_file_name.c_str());

pcap_pkthdr h;
h.caplen = packet_len;
h.len = packet_len;

pcap_dump((u_char*)dumper, &h, packet);

pcap_dump_close(dumper);
pcap_close(p);
  • 1
    Я не знаю, на какой ОС это работает, но если для этого потребуется #include <libpcap-1.3.0/pcap.h> , она не работает; он должен просто разрешать #include <pcap.h> , а более новые версии libpcap (например, 1.3.0) также должны разрешать #include <pcap/pcap.h> .
  • 0
    Я просто хотел подчеркнуть версию libpcap, которую я использую (1.3.0), но вы правы, я изменю ее, как вы предложили. И вообще, спасибо большое!
Теги:
tcp
tcpdump
libpcap
tshark

1 ответ

2
Лучший ответ

Почему вы не можете использовать WinPcap/libpcap непосредственно в коде C++? Это C libs, чтобы вы могли их связать.

Используйте libpcap под unix или winpcap под windoze.

  • 0
    что такое API для этого из libpcap?
  • 2
    pcap_open_dead() (для указания Ethernet - используйте DLT_EN10MB - и «длина снимка» - используйте 65535), pcap_dump_open() (чтобы открыть выходной файл), pcap_dump() (для записи пакетов) и pcap_dump_close() (когда вы готово).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню