腾讯云上Winpcap网络编程一之前言、目标

由于腾讯云上提供了Windows系统,所以我们这次Winpcap编程选用腾讯云主机实验。

我的腾讯云主机预装了Windows Server,截图如下:

系统版本是WIndowsServer 2012 64位。

编程目标

首先说一下本次Winpcap编程的目标任务:

1、基本任务(达标任务)

完成两台主机之间的数据通信(数据链路层)

  • 仿真ARP协议获得网段内主机的MAC表
  • 使用帧完成两台主机的通信(Hello! I’m …)

2、高端任务(优秀任务)

完成两台主机通过中间主机的数据通信(网络层)

  • 增加基于IP地址的转发功能
  • 增加网络层封装

编程概述

一句话,我们需要利用winpcap这个库用C语言编程来实现以上的任务。

Winpcap讲解

那么winpcap是什么?

大多数网络应用程序通过被广泛使用的操作系统原件来访问网络,如socket。由于操作系统已经处理了底层的细节问题(如协议的处理、数据包的封装等),并提供了与读写文件类似的函数接口,因此使用该方法可以很容易的访问网络中的数据。

然而有些时候,这种简单的方式并不能满足任务要求,有些应用程序需要直接访问网络中的数据包,也就是说,需要访问哪些没有被操作系统处理过的数据包。

WinPcap就是为Windows平台的应用程序提供这种访问方式,提供下列功能:

捕获原始数据包。无论是发送到运行WinPcap的机器上的数据包,还是在其它主机(存在网络共享介质上的主机)上进行交换的数据包,都可以被捕获。

在数据包传递给应用程序之前,根据用户指定的规则过滤数据包。

将原始数据包发送到网络上收集网络流量与网络状态的统计信息,它提供给我们什么呢?

它包含一个内核空间数据包过滤器(Netgroup Packet Filter, NPF),一个底层动态链接库(Packet.dll)和一个高层独立于操作系统的动态链接库(wpcap.dll)。

各部分关系见下图:

NPF:为了能够访问网络上传输的原始数据,数据包捕获系统需要绕过操作系统的协议栈。这就需要有一部分程序运行在操作系统的内核中,只有这样才能与网络接口驱动直接交互。在WinPcap中,与操作系统密切相关的是一个名为NPF的设备驱动程序,同时对不同版本的操作系统提供了不同版本的驱动程序。这些驱动程序提供了数据包捕获与发送的基本功能,同时提供了一个可编程的数据包过滤系统、一个网络监视引擎等高级功能。

动态链接库:为了让应用程序能够使用内核驱动提供的功能,数据包捕获系统必须导出相关的接口。对此,WinPcap提供两个不同层次的动态链接库:Packet.dll和wpcap.dll。 Packet.dll提供底层的API,用来直接访问驱动程序的函数,用来提供独立于微软公司不同操作系统的编程接口。

wpcap.dll库导出了更强大、更高层的捕获函数接口,具有与UNIX捕获库libpcap的兼容性。这两个库可使数据包的捕获独立于底层的网络硬件与操作系统。

编程流程

了解了winpcap之后,我们要做的就是利用它提供的类库来实现网络传输,网络解析等一系列的功能。

需要我们做好的准备有:

  • C语言的相关基础
  • 计算机网络的基础知识
  • 对开发环境的相关了解

如果对于上述中任何一个不熟悉,请先去补习一下基础知识吧。

参考资料

  • 吴功宜等,《计算机网络高级软件编程技术》(第2版),清华大学出版社
  • 徐恪等, 《高级计算机网络》,清华大学出版社
  • A.S. Tannenbaum,《计算机网络》(第5版),清华大学出版社
  • 吕雪峰等, 《网络分析技术揭秘(原理、实践与WinPcap深入解析》,机械工业出版社

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刘望舒

Android 模块化之路 模块间调用简易实现方案

2474
来自专栏SDNLAB

VXLAN in OpenStack Neutron

2285
来自专栏企鹅号快讯

浅谈几种SLB技术的实现

今天小普和大家分享下,在最近的学习过程中,关于几个负载均衡技术的理解,以及几个实现的原理和关键点,希望对各位读者朋友有收获。 1 http重定向协议实现负载均衡...

4995
来自专栏风中追风

分布式基础__session 和 cookie的差异

HTTP协议是一种无状态的 通信协议 。那么这就以为着 客户端按道理是需要每次请求之前都要和服务器做连接的。 但是每次都进行这种连接,会非常耗时,并且这些重复...

37610
来自专栏Java进阶

再谈session 和 cookie的差异

2558
来自专栏大魏分享(微信公众号:david-share)

浅谈互联架构下的各种缓存技术

面对巨大的客户端访问量冲击,怎么办? 当业务系统收到突发大流量冲击的时候,怎么办?例如,双十一、双十二,银行遇到的突发交易请求;或者网站遇到突发流量访问,怎么处...

5704
来自专栏SDNLAB

深入nDPI

前言 随着日益增加的网络应用数量,在网络上的流量种类越来越多,像QoS、安全性等方面的挑战,传统的方法已经开始乏力。比如P2P应用的带宽占用、使用随机端口的恶意...

5059
来自专栏F-Stack的专栏

F-Stack Q&A 第二期

Q1:请问再视频领域,媒体服务器,使用F-Stack是否合适? A1:F-Stack在纯推流的模式上是支持且合适的,如果有转码服务等计算密集型服务,需要等我们支...

44610
来自专栏web前端教室

简单粗暴,以小见大 -- 实现一个按钮的前端组件

按钮,一个button,一个div,一个a标签,都可以做成按钮。现在要把它做成一个前端组件,那前端组件是什么? 定义很多,我随便网上查一个,“指一些设计为通用性...

1957
来自专栏LIN_ZONE

CDN(Content Delivery Network)技术原理概要

注:在这里只是简单介绍了一下这几种技术,并不是特别详细,先对这些有个大概了解,方便以后的学习,如果感觉本文的内容说的不具体的话可以看一下这篇文章:CDN技术详...

562

扫码关注云+社区