君子兰

VS2017 WinPcap的配置及简单的使用demo

发布时间:2个月前热度: 8 ℃评论数:

一般涉及到网络编程,我们会用上层的socket相关API进行,但有些时候我们需要从底层进行抓包,在Windows上,我们可以用WinPcap来做这件事。

官网地址:https://www.winpcap.org/install/default.htm
在这里插入图片描述
首先在上面圈中的两个地方分别下载安装包和开发包。
在这里插入图片描述
然后先安装(注意这个是必须先做的,不然哪怕运行代码也会失败),安装一路next就行了,里面有一个勾选项是问要不要自动打开WinPcap驱动的,记得勾选上(默认就是这样的),不要手贱点掉,不然要自己去开(不知道怎么开),否则运行代码会找不到网络设备。

做完这些解压开发包,会看到里面自带有例子工程,直接用VS2017升级后打开即可(可能需要换Windows的sdk版本)。

比如检测网络设备的代码存放在“E:\winpcap\WpdPack_4_1_2\WpdPack\Examples-pcap\basic_dump_ex”这个路径下,用VS打开之后将其设置为启动项编译就能看到自己的网络设备,并进行监听。比如本人有两张网卡则会看到如下的设备列表:
在这里插入图片描述
如果只有一张网卡则会直接输出监听的结果。

具体的代码实现参照示例就行了,写的很好,才100左右行,无需要本人再冗述。

//忽视老接口安全警告#ifdef _MSC_VER#define _CRT_SECURE_NO_WARNINGS#endif#include "pcap.h"int main(){
	pcap_t *adhandle;//传感器对象句柄int res;//返回值char errbuf[PCAP_ERRBUF_SIZE];//错误信息struct tm *ltime;char timestr[16];struct pcap_pkthdr *header;const u_char *pkt_data;
	time_t local_tv_sec;char drivename[100] = "\\Device\\NPF_{5279D3EA-C863-485E-A1EA-5D1A18A85734}";//打开抓包器if ((adhandle = pcap_open_live(drivename,65536,1,1000,errbuf)) == NULL){printf("网络打开错误!请用专用软件查看\n");return -1;}//获得包数据while ((res = pcap_next_ex(adhandle, &header, &pkt_data)) >= 0) 
	{if (res == 0)continue;}if (res == -1) 
	{printf("Error reading the packets: %s\n", pcap_geterr(adhandle));return -1;}pcap_close(adhandle);return 0;}

WinPcap,配置,使用

手机扫码访问