APP下载

基于WinPcap 的网络嗅探器设计与实现

2013-12-31赵钢

电脑知识与技术 2013年15期

摘要: 针对安全问题在网络管理中的日益突出,基于Winpcap开发平台,使用Visual C + +作为开发工具,设计并开发了一个网络嗅探器。该文设计了一个GUI程序,实现IP、TCP、UDP数据包捕获和分析。同时分析了网络嗅探器的基本工作原理,并阐述了应用捕获数据包流,根据Winpcap关键功能给出了其具体实现。结果表明,该网络嗅探器结构简单,捕获数据快速,对网络安全管理具有重要意义。

关键词:WinPcap;MFC;嗅探器;计算机网络

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)15-3506-03

1 嗅探协议原理

1.1 IP协议

IP是英文Internet Protocol(网络互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。

1.2 TCP协议

TCP:Transmission Control Protocol (传输控制协议)TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议。在OSI/RM模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

1.3 UDP协议

UDP的全称是用户数据报协议,在网络中该协议用于处理数据包。它处在OSI模型中的第四层,即传输层,它处在TCP协议的更高一层。UDP不提供数据报分组、装配,不能将退回的数据包进行排序。也就是说,在消息发送后,不知道是否它是安全完整无损地运到了。UDP是用来支持那些需要相互传递数据的计算机网络应用程序。许多系统,包括网络视频会议系统,客户端/服务器模式的网络应用程序,都需要使用UDP协议。UDP协议从出现到目前为止已使用多年,虽然相比以前其光泽略有失色,但是即使是在今天,UDP仍是一个非常实用和可行的网络传输层协议。

2 Winpcap基本理论

2.1 Winpcap概念

大多数Unix操作系统提供了一套允许应用程序直接与网络相互联系的系统调用。这些指令对于那些需要通过网络捕获连续的包数据而不用内核进行过多的干预的包捕获应用程序非常有用。在Windows环境下,WinPcap就是这样一类工具。

WinPcap是一个免费的工具平台,可以在Windows操作系统中用于直接访问网络开发工具包(API)编程。大多数Windows84dbdad721c234e5e09294fcb625478fb093d2c789fb58502b203d94aec6e1f3网络应用程序是通过Winsock API(Windows socket)这样的高级编程接口来访问网络的。这种方法允许简单的在互联网上的数据传输,这是因为操作系统的TCP / IP协议栈的实现软件,可以处理低层细节(协议操作、流程再造等),并提供一个类似于函数接口来读写文件。

2.2 Winpcap目的与用途

发展WinPcap的目的是为Win32应用程序提供一个直接访问底层网络的接口。通过WinPcap平台,web应用程序可以实现以下功能:捕获原始数据包,包括发送到主机以及共享网络数据包;数据过滤,在数据包被发送到应用程序后,按照规定的用户捕获数据包过滤;发送原始数据,发送原始数据到网络;数据包统计,统计数据网络通信。函数通过一个设备驱动程序(驱动程序被安装在网络部分的Win32内核)和一组动态链接库(DLL)。所有这些功能都是通过一个强大的编程接口来实现,应用程序可以简化开发,可以移植到各种操作系统中。

2.3 基于Winpcap可开发的网络应用程序

目前,winpcap主要的开发和运行环境是windows NT/2000/XP。由于winpcap的用户中只有很小一部分使用windows 95/98/Me,并且微软也已经放弃了对win9x的开发和支持。实际上,winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。

Winpcap的组成与结构:WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成,如图2.5所示。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。

3 系统设计

3.1 系统功能设计

本系统的基本功能为实现网络数据包的捕获,并将其数据内容解析显示。网络数据包捕获功能主要负责从网络中捕获和过滤数据,这可以通过调用Winpcap提供的丰富的API函数来实现;数据解析及显示部分主要负责界面数据转化、解析、处理、格式化、协议分析等,这一部分主要通过MFC来设计一个单文档图形用户界面GUI,解析结果将通过MFC的类库显示到GUI中。

3.2 系统架构设计

网络嗅探器的整体设计由三个模块组成,自底向上分别是嗅探器设置模块,数据包捕获模块,解析和显示模块。嗅探器设置模块主要调用Winpcap提供的API,分为获取网络设备信息,设置并编译过滤器,打开网络设备 三个步骤。数据包捕获模块创建了新的线程,利用了Winpcap的非回调函数pcap_next_ex()函数从Winpcap底层驱动的数据缓冲区中读取数据包。并将数据包存储在系统临时文件中,以便之后的分析。用pcap_open_offline()函数从离线文件中读取包。读取到的任意一个符合捕获条件数据包,将其内容解析,并显示本数据包。捕获完成后,进入解析和显示模块。

网络嗅探器总体结构如图1。

3.3 子系统与模块设计

网络嗅探器设置模块分为三个子过程:

a.获取已连接的网络设备列表,WinPcap提供了 pcap_findalldevs_ex() 函数,这个函数返回一个 pcap_if 结构的链表, 每个这样的结构都包含了一个适配器的详细信息。

b.打开网络设备,Winpcap提供了pcap_open()函数,该函数第一参数制定要捕获数据包的哪些部分,第二参数用来制定适配器是否为混杂模式,第三参数为读取数据的超时时间,当适配器被打开后,就可以进行捕获工作了;

c.设置过滤器,Winpcap中用来过滤数据包的函数是 pcap_compile() 和 pcap_setfilter() 。pcap_compile() 它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。pcap_setfilter() 将一个过滤器与内核捕获会话相关联。当 pcap_setfilter() 被调用时,这个过滤器将被应用到来自网络的所有数据包,并且,所有的符合要求的数据包 (即那些经过过滤器以后,布尔表达式为真的包) ,将会立即复制给应用程序。

3.4 网络数据包的捕获模块

该部分创建了一个用于捕获数据包的线程,在该线程中调用Winpcap提供的pcap_next_ex()函数从底层驱动数据缓冲区中读取数据包,该函数接受已打开的网络设备句柄,返回捕获数据包的实体。并用pcap_dump()函数将每一个数据包写入临时文件中。

3.5 解析和显示模块

该部分在接收到用户发出的捕获完成消息后,将数据包从离线文件中逐条取出并进行解析和显示。将解析完毕数据包中的各项内容填入已经预先声明的协议的数据结构中,包括(序号,捕获时间,以太帧长度,传输层协议,源IP地址,目的IP地址,源MAC地址,目的MAC地址),然后将数据结构添加到列表视图中。

4 系统测试与运行

在运行本程序之前,须有一个正在连网的网络接口,在本机中使用的是PPP/SLIP网络接口。程序开始运行后,第一步须先设置嗅探器选项,选择网络设备与设置过滤器;第二步,点击捕获菜单栏下的开始捕获菜单项或者工具栏中的开始按钮,均可以启动捕获数据包线程;在用户希望停止或者结束捕获时,可以点击捕获菜单栏下的停止捕获或者工具栏中的停止按钮停止捕包。再次捕包时须重新设置嗅探器选项。点击关闭按钮,程序结束。

程序测试截图见图2:

5 总结

本文设计的基本内容是捕获IP,TCP,UDP数据包,通过解析数据包,可以进一步理解和分析各类数据包的结构。

1) 设计了一个GUI程序,完成了局域网数据包的捕获和IP、TCP、UDP数据包的解析;

2) 捕获了几个网络数据报,给出实例并分析了各数据包各字段的含义;

3) 说明了基于Winpcap编程的基本原理、程序总体框架。

参考文献:

[1] 吴功宜,董大凡,王珺,等.计算机网络高级软件编程技术[M].北京:清华大学出版社,2008.

[2] 胡晓元,史浩山. Winpcap包截获系统的分析及其应用[J].计算机工程,2005,(1): 96-97.

[3] 谢小特,王勇军.基于Winpcap的捕包程序设计[J].软件导刊,2007,(11): 71-72.

[4] 孙萍,徐朝阳,刁鸣.基于Winpcap的以太网监听系统的设计与实现[J].舰船电子对抗, 2007,(2): 94-95.

[5] 赵辉,叶子青.VisualC+ +系统开发实例精粹[M].北京:人民邮电出版社,2005.

[6] 庄春兴,彭奇志.基于Winpcap的网络嗅探程序设计[J].计算机与现代化,2002,(5):11-13.