Мне нужно сохранить UDP-пакеты в файл и использовать формат pcap для повторного использования различных доступных инструментов (wireshark, tcpdump, ...). Есть некоторая информация в this thread, но я не могу найти, как написать глобальный заголовок файла 'struct pcap_file_header'.Создание файла pcap
pcap_t* pd = pcap_open_dead(DLT_RAW, 65535);
pcap_dumper_t* pdumper = pcap_dump_open(pd, filename);
struct pcap_file_header file_hdr;
file_hdr.magic_number = 0xa1b2c3d4;
file_hdr.version_major = 2;
file_hdr.version_minor = 4;
file_hdr.thiszone = 0;
file_hdr.sigfigs = 0;
file_hdr.snaplen = 65535;
file_hdr.linktype = 1;
// How do I write file_hdr to m_pdumper?
while((len = recvmsg(sd, &msg_hdr, 0)) > 0)
pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data);
Как написать глобальный заголовок файла? Если нет конкретной функции pcap, как я могу получить файловый дескриптор для вставки заголовка с помощью write()?
Спасибо, но похоже, что вы все сделали, используя обычные вызовы write(). Я использую pcap_dump() и не могу понять, где получить дескриптор файла. –
@RobertKubrick Обновлено выше. Я оставил исходный ответ, так как даже с помощью 'pcap_dump' вам все равно нужно подделать заголовок IP, и связанный с ним патч может помочь в этом. – je4d
Правда, не нужно писать глобальный заголовок файла, я только что проверил. –