如何使用 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);
我需要设置一个编程环境来从 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);