用c ++读取pcap文件

时间:2013-11-12 11:17:41

标签: c++ winpcap

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

我想知道是否有人可以帮助我。非常感谢。

2 个答案:

答案 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);