我正在尝试用c ++读取pcap文件(我正在使用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>
.
.
.
class2.h中的:
.
.
.
#include <pcap.h>
.
.
.
main.cpp中的:
#include "stdafx.h"
#include "class1.h"
#include "class2.h"
.
.
.
我想知道是否有人可以帮助我。非常感谢。
答案 0 :(得分:1)
尝试在包含pcap.h之前添加它:
#define PCAP_DONT_INCLUDE_PCAP_BPF_H
从我所看到的,这将使pcap.h不再包含pcap-bpf.h,这是那些定义的来源(除了Packet32.h)。
您可能还需要在同一位置添加Packet32.h的包含,以确保在包含pcap.h之前定义始终可用。
答案 1 :(得分:0)
使用pcap_generator库来源
阅读pcap文件阅读示例
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);