gpt4 book ai didi

c++ - Winpcap 保存原始数据包不是来自适配器

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:03 27 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,将我的旧自定义以太网日志(bin 文件)转换为标准 winpcap 样式日志。

问题是我似乎找不到如何在不使用适配器(网卡)的情况下打开 pcap_t* 的示例。尚未创建 temp.pkt。

我看过 Winpcap 提供的示例,它们在转储数据包时都使用实时适配器。这个例子最接近\WpdPack\Examples-pcap\savedump\savedump.c 最接近,看下面的例子稍作修改。

#ifdef _MSC_VER
/*
* we do not want the warnings about the old deprecated and unsecure CRT functions
* since these examples can be compiled under *nix as well
*/
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "pcap.h"

int main(int argc, char **argv)
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_dumper_t *dumpfile;


/* Open the adapter */
if ((adhandle= pcap_open(??????, // name of the device
65536, // portion of the packet to capture.
// 65536 grants that the whole packet will be captured on all the MACs.
1, // promiscuous mode (nonzero means promiscuous)
1000, // read timeout
errbuf // error buffer
)) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}

/* Open the dump file */
dumpfile = pcap_dump_open(adhandle, argv[1]);
if(dumpfile==NULL) {
fprintf(stderr,"\nError opening output file\n");
return -1;
}

// ---------------------------
struct pcap_pkthdr header;
header.ts.tv_sec = 1 ; /* seconds */
header.ts.tv_usec = 1; /* and microseconds */
header.caplen = 100; /* length of portion present */
header.len = 100 ; /* length this packet (off wire) */

u_char pkt_data[100];
for( int i = 0 ; i < 100 ; i++ ) {
pkt_data[i] = i ;
}

pcap_dump( (u_char *) dumpfile, &header, (u_char *) &pkt_data);
// ---------------------------

/* start the capture */
// pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile);

pcap_close(adhandle);
return 0;
}

最佳答案

我建议使用 pcap_t 这样做,因为使用 WinPcap 比自己编写更好。

以下是操作步骤:

  1. 使用pcap_open_dead() 函数创建一个pcap_t。阅读功能说明here .以太网的 linktype 是 1。
  2. 使用 pcap_dump_open() 函数创建一个 pcap_dumper_t
  3. 使用pcap_dump()函数将数据包写入转储文件。

希望对您有所帮助。

关于c++ - Winpcap 保存原始数据包不是来自适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com