WinPcap网络编程入门——0. 环境配置及系列介绍

系列教程章节直达:
Winpcap网络编程入门——1. 获取设备列表;


说明:本教程适用于网络编程开发人员入门,将从底层分析 WinPcap 的执行过程,结合一些实际用例来学习 WinPcap网络编程。

Pcap 技术是网络底层开发的重要工具之一,允许应用程序避开成熟的网络协议,直接处理网络数据包。Pcap 技术直接对进出网卡的原始数据包进行处理,即用户自己对要传输的网络数据按照协议的首部格式进行封装,用户自己完成协议需要封装的内容,操作的是原始数据包套接字。

套接字是操作系统提供给应用程序的编程接口,经过了操作系统处理(网络协议处理),提供的数据是剥离了网络协议的网络数据。

WinPcap 是 Windows 平台下在数据链路层进行网络数据捕获和网络分析的开源库,它避开了操作系统对网络数据的隐藏,直接对数据链路层的数据分组进行处理,也就是原始的网络数据进行操作,可以方便地进行网络数据的封装和处理,它提供的功能主要有:

  • 捕获经由主机的数据包
  • 根据应用程序提供的规则过滤数据包
  • 发送原始数据包到网络上
  • 统计和收集网络流量信息

关于 WinPcap 的介绍就到这里,需要了解更多可以去官网(https://www.winpcap.org/)


1. WinPcap 资料获取

使用 WinPcap 必须安装其软件以及获取对应的 DLL、底层库:

  • WinPcap4.1 安装包:链接:https://pan.baidu.com/s/1q5s06B1nhXwoMr7do_FUGg 提取码:joeh(安装后需重启)
  • WpdPack4.1 库:链接:https://pan.baidu.com/s/1xlV-jMpxMaQhHBPrhIAEzw 提取码:4oea (直接放到你的编程通用位置即可)
  • WinPcap 中文技术文档:链接:https://pan.baidu.com/s/16UDUnpwEpK6MjBcGZa–0A 提取码:8kr5

2. WinPcap 环境配置

1. VC++6.0 环境配置

  1. 在 vc++6.0 中设定 Include 目录: 打开 vc++6.0 菜单,Tools -> Option -> Directories,在 include files 中添加 …\wpdpack\Include 目录(就是你存放 WpdPack4.1 库的文件夹下的 include 文件夹);
  2. 在 vc++6.0 中设定 Library 目录: 在 Library files 中添加 …\wpdpack\Lib 目录;
  3. 在 VC++的新建工程中,在 Project -> settings -> Link,在 Object/library modules 中加上 wpcap.lib。

2. vs2022 环境配置(其它版本基本相同)

  1. 新建一个空项目并添加一个空的源文件;

  2. 点击菜单栏 项目 -> 项目属性

  3. 选择 C/C++ -> 预处理器,在预处理器定义中添加 WPCAP 和 HAVE_REMOTE 两个宏定义,然后点击 应用;

  4. 选择 链接器 -> 输入,在附加依赖项添加 wpcap.lib 、 ws2_32.lib 、 Packet.lib 三个库,然后点击应用;

  5. 选择 VC++ 目录,添加 WpdPack 文件夹中的包含目录( include 目录),然后点击应用;


  6. 选择 VC++ 目录,添加 WpdPack 文件夹中的库目录( Lib 目录),然后点击应用;


  7. 选择 C/C++ -> 语言,将 符合模式 设置为 否,最后点击确定即可;

  8. 将解决方案平台设置为 x64

  9. vs2022 的环境配置就到这里结束,注意,本教程使用C语言开发,所以需要在项目中新建 .c 文件而不是 .cpp 文件(如果无法直接新建,可以先新建 .cpp 文件,然后修改文件后缀为 .c 即可)

  10. 测试配置是否完成,复制以下代码到项目中运行,注意是 .c 文件不是 .cpp 文件,否则 vs 会报错!

#define WIN32      // 必须加这条,否则vs不会自动识别
#include <stdio.h>
#include <pcap.h>
#pragma comment(lib, "wpcap.lib")main()
{pcap_if_t* alldevs, * d;int i = 0;char errbuf[PCAP_ERRBUF_SIZE];if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL,&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("\nNo interfaces found! Make sure Winpcap is installed.\n");return;}// 释放设备pcap_freealldevs(alldevs);
}

运行之后就会显示出已获取到的设备列表了,至此,环境配置就完成了!
接下来我们将学习如何获取到设备,点击跳转下一节。


系列教程章节直达:
Winpcap网络编程入门——1. 获取设备列表;

WinPcap网络编程入门——0. 环境配置及系列介绍相关推荐

  1. WinPcap网络编程入门——1. 获取设备列表

    WinPcap网络编程入门--1. 获取设备列表 系列教程章节直达: Winpcap网络编程入门--1. 获取设备列表: 上节中我们简单介绍了 WinPcap 的相关资料,配置好了开发环境,现在就让我 ...

  2. 脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?

    本文由"小姐姐养的狗"原创发布于"小姐姐味道"公众号,原题<127.0.0.1和0.0.0.0地址的区别>,收录时有优化和改动.感谢原作者的分享. ...

  3. Android网络编程入门解析

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  4. Day14.网络编程入门及其应用

    网络编程入门及其应用 文章目录 网络编程入门及其应用 前言 一. 网络编程的入门 1.1 计算机网络基础 1.2 计算机网络发展史 1.3 TCP/IP模型 1.4 网络应用模式 二. 基于HTTP协 ...

  5. Day14:网络编程入门

    网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享.今天计算机网络中的设备和计算机网络的用户已经多得不可计数 ...

  6. 网络编程入门从未如此简单(一):假如你来设计网络,会怎么做?

    本文原题"如果让你来设计网络",有修订和改动,收录已征得作者同意,转载请联系作者.本文已同步发布于52im社区:http://www.52im.net/thread-3330-1- ...

  7. Day14 -A 网络编程入门

    网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享.今天计算机网络中的设备和计算机网络的用户已经多得不可计数 ...

  8. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  9. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    转自即时通讯网:http://www.52im.net/ 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和&quo ...

最新文章

  1. atomic原子类实现机制_JUC学习笔记--Atomic原子类
  2. jmeter固定定时器使用与思考
  3. mysql binlo 抽取_使用mysqlbinlog根据时间点提取SQL简单方法
  4. jax-rs jax-ws_信守承诺:针对JAX-RS API的基于合同的测试
  5. open表和closed表_excel工作表合并,多文件数据一键合成
  6. Android中的Handler机制
  7. ASP.NET MVC获取上传的路径
  8. 前魅族科技高级副总裁李楠:iPhone 11的工业设计完全崩盘
  9. android 获取monkey日志_Monkey日志如何分析
  10. windows下安装linux环境
  11. (内附教程链接及模板下载)如何利用ICEM进行内流道的抽取
  12. Ubuntu20.04 安装matlab2017b
  13. Chaos Mesh介绍
  14. Go学习——runtime.Caller()函数
  15. Codeforces Round #703 (Div. 2)A. Shifting Stacks
  16. cad lisp 二次抛物线_cad画二次抛物线
  17. 无稳态多谐震荡器学习
  18. 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
  19. C++ 并发指南 std::lock
  20. html入门介绍,html标签入门介绍

热门文章

  1. SpringBoot之Undertow
  2. php手机网站支付宝_php支付宝手机网页支付类实例
  3. 解析-ESP01模块开发Arduino物联网wifi开关模块
  4. 这6个免费去水印工具,一定要码住!
  5. RocketMQ 在联想大数据中的应用简析
  6. 美柚广告投放的优势!美柚广告推广合作找哪里?
  7. 00后大学生与电子版微积分
  8. ESP32经典蓝牙和BLE的使用 (基于Arduino)
  9. Windows10 使命召唤14二战:由于找不到MSVCR120.dll ……
  10. 如何把第三方类库jar包编译为BlackBerry类库cod文件