WinPcap获取设备列表

最近在自学基于winpcap编程,多多少少中间会遇到一些问题,这里记录也分享一下中间的一些问题。

声明:实验基于WinPcap中文技术文档
再开始之前,我们需要在本机安装winpcap驱动程序和下载所需的程序包,请自行下载安装,或链接:https://pan.baidu.com/s/1vUdOq8OFn_jL8ni9-6L6Ug
提取码:2rxc 。

准备好之后,便可以测试这段代码,我的环境是VS2019community,直接创建一个控制台项目或空项目,将以下代码复制进去。

#include<iostream>
#define WIN32    // 缺少此项会提示pcap.h内语法错误
#include "pcap.h"
//#include "remote-ext.h"   /* 系统项目提示:不用直接包含此文件 */

// #define HAVE_REMOTE   /*未在项目属性设置也可以使用这个宏定义*/

using namespace std;

int main()
{
    
    
	pcap_if_t* alldevs;
	pcap_if_t* d;
	int i = 0;
	char errbuf[PCAP_ERRBUF_SIZE];

	/*获取本地机器设备列表*/
	if (pcap_findalldevs_ex((char *)PCAP_SRC_IF_STRING, NULL/*auth is not needed*/, &alldevs, errbuf) == -1)
	{
    
    
		fprintf(stderr, "Error in pcap_findalldevs_ex:%s\n", errbuf);
		exit(1);
	}
	/*打印列表*/
	for (d = alldevs; d != NULL; d = d->next)
	{
    
    
		printf("%d. %s", i++, d->name);
		if (d->description)
			printf(" (%s)\n", d->description);
		else
			printf(" (No description available)\n");
	}

	if (i == 0)
	{
    
    
		printf("\n No interfaces found!\n");
		exit(1);
	}
	// 使用完之后释放
	pcap_freealldevs(alldevs);

	return 0;
}

另外,我们需要对项目属性进行配置,主要包含以下几处。
第一:项目->项目属性->配置属性->C/C++ ->常规->附加包含目录,添加环境准备中winpcap程序包里面的Include文件夹。设置完成先不要关闭这个窗口。
在这里插入图片描述
在这里插入图片描述
第二:项目->项目属性->配置属性->C/C++ ->预处理器,在预处理器定义中添加HAVE_REMOTE。(注意每项之间有个英文分号;不要漏掉)。
在这里插入图片描述
这一项其实和代码中这一句的效用相同

#define HAVE_REMOTE

第三:项目->项目属性->配置属性->链接器,找到附加库目录,添加程序包中的lib文件夹路径。
在这里插入图片描述
在这里插入图片描述
第四:项目->项目属性->配置属性->链接器->输入->附加依赖项,添加以下代码;如果忽略这一项,将会出现报错pcap_findalldevs_ex和pcap_freealldevs无法解析的外部符号。

ws2_32.lib;wpcap.lib;Packet.lib;

在这里插入图片描述

目前我碰到的大部分的问题基本配置完这个环境就可以解决,下面是运行结果:
输出适配器列表
如果你在这个小实验里面还碰到的别的问题没有解决,分享给我或许我能帮到你。

附:如果到现在你还有一个问题的话,那可能就是关于X86库不能在直接在X64平台使用导致的两个函数仍旧无法解析的问题了。

猜你喜欢

转载自blog.csdn.net/MARS_098/article/details/113350211