《Windows网络编程 教学课件 ppt 作者 罗莉琴 詹祖桥 第9章》由会员分享,可在线阅读,更多相关《Windows网络编程 教学课件 ppt 作者 罗莉琴 詹祖桥 第9章(77页珍藏版)》请在金锄头文库上搜索。
1、,Windows网络编程实用教程,授课教师: 职务:,第9章 基于WinPcap技术的网络数据包捕获、过滤和分析技术,课程描述 本章介绍基于WinPcap技术的网络数据包捕获、过滤和分析技术。如果在网络出口位置对网络中的数据包进行捕获和分析,就可以统计出哪个IP地址的流量最大、这些流量都是基于哪些协议和应用的、产生这些流量的时间等,有了这些“铁证”,对违规行为进行管理也就变得简单多了。,本章知识点,9.1 WinPcap技术基础 9.2 下载和安装WinPcap开发包 9.3 在Visual C+中使用WinPcap技术,9.1 WinPcap技术基础,9.1.1 WinPcap的体系结构 9
2、.1.2 NIC驱动器和NDIS 9.1.3 网络组包过滤(NPF)模块 9.1.4 捕获数据包的原理和步骤,9.1.1 WinPcap的体系结构,WinPcap是Windows Packet Capture的缩写,即Windows平台下的网络数据包捕获库。它可以独立于TCP/IP协议发送和接收原始数据包,其主要功能如下: 绕开网络协议栈捕获网络数据包,支持远程数据包捕获功能。 在数据包发送到应用程序之前,按照指定的规则实现核心层数据包过滤。 在网络上发送原始数据包。 收集网络通信过程中的统计信息。,WinPcap体系结构,WinPcap的体系结构包含3个层次,WinPcap的体系结构包含3个
3、层次,即网络、核心层和用户层。 网络:代表网络中数据包。 核心层:其中包含NPF模块和NIC驱动器。NPF(Netgroup Packet Filter,网络组包过滤)是WinPcap的核心部分,它用于处理网络上传输的数据包,并对用户级提供捕获、发送和分析数据包的能力;NIC(Network Interface Card,网络适配器)驱动器直接管理网络接口卡,NIC驱动器接口可以直接从硬件控制处理中断、重设NIC、暂停NIC等;NDIS(Network Driver Interface Specification,网络驱动接口规范)是定义网络适配器和协议驱动(TCP/IP实现的)之间的通信的标
4、准。 用户层:其中包含用户代码以及wpcap.dll和packet.dll两个动态链接库。,以简洁方式来描述WinPcap体系结构,9.1.2 NIC驱动器和NDIS,网络接口卡和NIC驱动器 中间层驱动器 传输驱动器或者协议驱动器,1网络接口卡和NIC驱动器,NIC驱动器可以直接管理网络接口卡。它的下端接口与硬件关联,而其上端接口允许高层向网络中发送数据包、处理中断、重置网络适配器、中止网络适配器以及查询和设置驱动器的操作属性。NIC驱动器可以是微端口,也可以是传统的完全NIC驱动器。 微端口仅实现硬件指定的、用于管理网络适配器的必要操作,包括在网络适配器上发送和接收数据。大多数最低层NIC
5、驱动器的操作(例如同步操作)都是由NDIS操作的。微端口不会直接调用操作系统例程,NDIS是微端口访问操作系统的接口。微端口将数据包传送到NDIS,而NDIS确保这些数据包会传送给正确的网络协议。 完全NIC驱动器用于执行硬件指定的操作以及所有由NDIS完成的同步和队列操作。,2中间层驱动器,中间层驱动器接口位于高层驱动器(例如协议驱动器)和一个微端口之间。对于高层驱动器而言,中间层驱动器就像微端口一样;而在微端口看来,中间层驱动器就像是协议驱动器。 一个中间层协议可以在另一个中间层驱动器之上,尽管这种分层方法可能给系统性能带来副作用。开发中间层驱动器的主要原因是实现已有传统协议驱动器和微端口
6、之间的介质转换,这样就可以管理协议驱动器不知道的新介质类型的网络适配器。例如,中间层驱动器可以将LAN协议转换为ATM协议。中间层驱动器无法与用户模式应用程序进行通信,而只能与其他NDIS驱动器通信。,3传输驱动器或者协议驱动器,协议驱动器用于实现网络协议栈,例如IPX/SPX或者TCP/IP,它可以为网络适配器提供服务。协议驱动器为其上层的应用程序层的客户端提供服务,并且与其下层的NIC驱动器或者中间NDIS驱动器相连。 NPF是协议驱动器的一种实现。从性能的角度来看,这并不是最佳的选择。但它允许独立于MAC层完全访问裸流量。,9.1.3 网络组包过滤(NPF)模块,1数据包的捕获和过滤,捕
7、获数据库是WinPcap的核心技术。在捕获时,驱动器使用网络接口嗅探数据包,并把它们完整地传送到用户层应用程序。 可以看到,捕获数据包时使用了两个组件,即过滤器和核心缓冲区。,2监测和统计,NPF中包含一个可编程的监测模块,它可以对网络流量进行简单的统计和计算。不需要把数据包复制到用户层应用程序,只要简单地接收和显示从监测引擎获得的结果即可收集到统计信息。不需要捕获数据包,也就避免了捕获过程中可能耗费的CPU和内存资源。 监测引擎由一个带有计数器的分类器构成。NPF中的一个过滤引擎对数据包进行分类,没有被过滤掉的数据会进入计数器。计数器拥有一些变量,用于保存接收到的数据和过滤器接收的字节数。每
8、当有新的数据包进入时,这些变量的值都会被更新。监测引擎会定期将这些变量的值传递给用户层应用程序,传递的时间可以由用户自行配置。,3转储到磁盘,4数据包发送,NPF允许将一个原始数据包发送的网络上。要实现此功能,需要用户层的应用程序在NPF设备文件上执行一个WriteFile()的系统调用。数据被发送到网络上时并不会进行任何协议的封装,因此应用程序必须亲自为每个要发送的数据包填写好包头的数据。,9.1.4 捕获数据包的原理和步骤,以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输的。当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道
9、争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。,1网络的工作模式,(1)广播模式(Broad Cast Model):MAC地址是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。 (2)多播传送(Multicast Model):多播传送地址作为目标MAC地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。 (3)直接模式(Direct Model):工作在直接模式下的网卡只接收目标地址是自己MAC地址的帧。 (4)混杂模式(Pro
10、miscuous Model):工作在混杂模式下的网卡接收所有流过网卡的帧,数据包捕获程序就是在这种模式下运行的。 网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包,这样就可以达到对于网络信息监视捕获的目的。,2捕获和过滤网络数据包的步骤,(1)打开网卡,并设为混杂模式 (2)回调函数Network Tap在得到监听命令后,从网络设备驱动程序处收集数据包,把监听到的数据包传送给过滤程序。 (3)当数据包过滤器监听到有数据包到达时,NDIS中间驱动程序首先调用分组驱动程序,该程序将数据传递给每一个参与
11、进程的分组过滤程序。 (4)然后由数据包过滤程序决定哪些数据包应该丢弃,哪些数据包应该接收,是否需要将接收到的数据拷贝到相应的应用程序。 (5)通过分组过滤器后,将未过滤掉的数据包提交给核心缓冲区。然后等待系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。 (6)关闭网卡。,9.2 下载和安装WinPcap开发包,9.2.1 下载WinPcap 9.2.2 安装WinPcap 9.2.3 源代码的目录结构,9.2.1 下载WinPcap,http:/www.winpcap.org/,下载WinPcap的页面,下载WinPcap开发包,单击窗口左侧栏目条
12、中的“Development”超链接,打开下载开发资源页面。 单击“Download WinPcap 4.1.1 Developers Pack”超链接,即可下载WinPcap 4.1.1的开发包,文件名为WpdPack_4_1_1.zip。开发包中包含开发WinPcap应用程序时需要引用的头文件(.h文件)和库文件(.lib文件),它不需要安装,只要将其解压缩后即可使用。,9.2.2 安装WinPcap,双击WinPcap_4_1_1.exe,打开WinPcap安装向导。单击“Next”按钮,打开欢迎窗口。,安装WinPcap,单击“Next”按钮,打开许可协议窗口。单击“I Agree”按
13、钮,打开安装选项对话框。如果在当前计算机上始终运行WinPcap应用程序,则选择“Automatically the WinPcap driver at boot time”复选框。然后单击“Install”按钮,开始安装WinPcap。,9.2.3 源代码的目录结构,解压缩WpdPack_4_1_1.zip,可以看到其中包含如下几个子目录: docs,保存详细的用户使用手册。 Examples-pcap,采用libpcap库接口的示例程序。 Examples-remote,采用wpcap库接口的示例程序。 Include,保存在WinPcap库上开发所需的头文件。 Lib,保存在WinPca
14、p库上开发所需的库文件。,9.3 在Visual C+中使用WinPcap技术,9.3.1 环境配置 9.3.2 获取与网络适配器绑定的设备列表 9.3.3 获取网络适配器的高级属性信息 9.3.4 打开网络适配器并实现抓包功能 9.3.5 不使用事件处理器进行抓包 9.3.6 过滤数据包 9.3.7 分析数据包,9.3.1 环境配置,在开发WinPcap应用程序之前,首先应该准备好开发环境。参照9.2小节中介绍的方法下载并安装WinPcap,解压缩WinPcap开发包。建议将WpdPack_4_1_1.zip中包含的Include和Lib两个目录复制到应用程序的解决方案目录下。 创建一个MF
15、C应用程序项目,打开项目属性对话框,在左侧的项目列表中选择“配置属性”/“C/C+”/“常规”,在右侧的“附加包含目录”栏中输入“Include”(这里假定将WpdPack_4_1_1.zip中包含的Include目录复制到解决方案目录下,即项目目录的上级目录。这样做的好处是可以让多个项目共享头文件)。,设置项目的附加包含目录,设置项目的附加库目录,然后在项目属性对话框左侧的项目列表中选择“配置属性”/“链接器”/“常规”,在右侧的“附加库目录”栏中输入“Lib”(这里假定将WpdPack_4_1_1.zip中包含的Lib目录复制到解决方案目录下,即项目目录的上级目录。这样做的好处是可以让多个
16、项目共享库文件).,设置项目中引用的库文件,再选择“配置属性”/“链接器”/“输入”,在右侧的“附加库目录”栏中输入“Packet.lib wpcap.lib ws2_32.lib”,通常在WinPcap应用程序中会引用这3个库文件。,9.3.2 获取与网络适配器绑定的设备列表,1pcap_findalldevs_ex()函数 2pcap_rmtauth结构体 3pcap_if_t结构体 4pcap_freealldevs()函数 5示例程序,1pcap_findalldevs_ex()函数,在WinPcap中,可以调用pcap_findalldevs_ex()函数来获取与网络适配器绑定的设备列表,函数原型如下: int pcap_findalldevs_ex(char* source, struct pcap_rmtauth* auth, pcap_if_t* alldevsp, char* errbuf); 参数说明如下: source,指定源的位置。p