winpcap — чтение файла pcap в Stack Overflow

Я пытаюсь прочитать файл 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".
.
.

Интересно, кто-нибудь может мне помочь с этим? Это было бы очень ценно.

0

Решение

Попробуйте добавить это, прежде чем включать pcap.h:

#define PCAP_DONT_INCLUDE_PCAP_BPF_H

Из того, что я вижу, это остановит pcap.h от включения pcap-bpf.h, откуда берутся эти определения (в дополнение к Packet32.h).

Вам также может понадобиться добавить туда же файл Packet32.h, чтобы убедиться, что определения всегда доступны до включения pcap.h.

1

Другие решения

Для чтения файла 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);
0

По вопросам рекламы [email protected]