Я пишу приложение, которое слушает сетевой интерфейс, выбирает некоторые кадры, редактирует их, а затем сохраняет их на диск. Очень похоже на tshark и tcpdump.
Мой код написан на C++
Тем не менее, я хочу сохранить свои пакеты в формате pcap, и я не могу найти библиотеку C/C++, которая принимает кадры Ethernet (в памяти) и сохраняет их в файл.pcap.
Обновление решения:
#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);
Почему вы не можете использовать WinPcap/libpcap непосредственно в коде C++? Это C libs, чтобы вы могли их связать.
Используйте libpcap под unix или winpcap под windoze.
pcap_open_dead()
(для указания Ethernet - используйте DLT_EN10MB
- и «длина снимка» - используйте 65535), pcap_dump_open()
(чтобы открыть выходной файл), pcap_dump()
(для записи пакетов) и pcap_dump_close()
(когда вы готово).
#include <libpcap-1.3.0/pcap.h>
, она не работает; он должен просто разрешать#include <pcap.h>
, а более новые версии libpcap (например, 1.3.0) также должны разрешать#include <pcap/pcap.h>
.