Я пытаюсь прочитать файл pcap в C ++ (я использую VS 2008), и у меня возникают следующие ошибки:
1) ошибка C2011: переопределение типа ‘bpf_program’: ‘struct’.
2) ошибка C2011: переопределение типа ‘bpf_insn’: ‘struct’
Я предполагаю, что проблема в том, что в один файл я включаю Packet32.h, а в другой файл — pcap.h (мне нужны функции Packet32.h в определенном классе, и мне нужен pcap.h для чтения файла pcap в другом классе) , У меня есть заголовки в каждом файле.
В основной класс я включаю оба вышеупомянутых класса. Если я переключаю порядок включения, я получаю еще одну ошибку. Вот простой код, который выглядит как мой:
в class1.h:
.
.
.
#include <Packet32.h>
#include <windows.h>
#include <process.h>
.
.
.
в классе 2.h:
.
.
.
#include <pcap.h>
.
.
.
в main.cpp:
#include "stdafx.h"#include "class1.h"#include "class2.h".
.
.
Интересно, кто-нибудь может мне помочь с этим? Это было бы очень ценно.
Попробуйте добавить это, прежде чем включать pcap.h:
#define PCAP_DONT_INCLUDE_PCAP_BPF_H
Из того, что я вижу, это остановит pcap.h от включения pcap-bpf.h, откуда берутся эти определения (в дополнение к Packet32.h).
Вам также может понадобиться добавить туда же файл Packet32.h, чтобы убедиться, что определения всегда доступны до включения pcap.h.
Для чтения файла pcap используйте pcap_generator библиотечные источники
Пример чтения
PCAPFILE * pfr = lpcap_open("./pcaplibtestfile.pcap");
pcap_hdr_t phdr;
if( lpcap_read_header( pfr, &phdr ))
{
int rese_rec_read = 0 ;
pcaprec_hdr_and_data_t p_rec_data;
do{
rese_rec_read = lpcap_read_frame_record( pfr , &p_rec_data);
}while(rese_rec_read>0);