0

我正在尝试用 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"
.
.
.

我想知道是否有人可以帮助我解决这个问题。将不胜感激。

4

2 回答 2

2

尝试在包含 pcap.h 之前添加它:

#define PCAP_DONT_INCLUDE_PCAP_BPF_H

据我所知,这将阻止 pcap.h 包含 pcap-bpf.h,这是这些定义的来源(除了 Packet32.h)。

您可能还需要在同一位置添加 Packet32.h 的包含,以确保在包含 pcap.h 之前定义始终可用。

于 2013-11-12T12:48:43.750 回答
0

要读取 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);
于 2018-05-14T19:13:29.847 回答