如何使用 visual c++ 从 wireshark 读取 pcap 文件

How to read a pcap file from wireshark with visual c++

我需要设置一个编程环境来从 Wireshark 读取 pcap 文件。(C++) 读取 pcap 文件的软件库。(我不知道) 我还需要一个 DNS 消息解析器来获取 DNS 的内容 消息。(我也没找到)

这是我所做的: 我使用 Wireshark 捕获了流量并保存了文件。 我按照这个网站上的这个步骤 ((https://www.rhyous.com/2011/11/13/how-to-read-a-pcap-file-from-wireshark-with-c/)) 这是我的代码:

#include <string>
#include <iostream>
#include <pcap.h>


using namespace std;

int main(int argc, char *argv[])
{
string file = "C:\Users\It-am\Desktop\Master\dns-ipv4-ipv6.pcap";

char errbuff[PCAP_ERRBUF_SIZE];

pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);

struct pcap_pkthdr *header;

const u_char *data;

u_int packetCount = 0;

while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)
{
    printf("Packet # %i\n", ++packetCount);
    printf("Packet size: %d bytes\n", header->len);

    if (header->len != header->caplen)
        printf("Warning! Capture size different than packet size: %ld bytes\n", header->len);

    printf("Epoch Time: %d:%d seconds\n", header->ts.tv_sec, header->ts.tv_usec);

    for (u_int i = 0; (i < header->caplen); i++)
    {
        if ((i % 16) == 0) printf("\n");
        printf("%.2x ", data[i]);
    }
    printf("\n\n");
}
}

但最后,我有一个错误((LNK1104无法打开文件'winpcap.lib')) 如果有人能解决这个问题,我将不胜感激。 或者,如果有人有其他代码在 C++ 中实现此数据,请提供帮助。 提前致谢。

库名不是winpcap.lib,而是wpcap.lib。您可能还需要 link 反对 Packet.lib。您必须告诉 link 人员文件的位置。这些文件夹对于 Win32 是 Lib,对于 64 位是 Lib\x64

使用 this 库来源 pcap_file_generator。 阅读示例:

#include "pcap_file_generator.h"
...

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);
      //p_rec_data -  contain data of record
    }while(rese_rec_read>0);