IP网络数据嗅探器设计
2014-03-31周璐璐
周璐璐
摘 要:随着网络技术的发展及其应用的普及,互联网上的信息资源日渐繁多,复杂的网络环境使得信息存储、处理的风险大大增加,同时信息传送也产生了新的问题。本设计IP网络数据嗅探器是软件网络数据嗅探器,它可以获得计算机的网卡列表供用户选中要用于监听工作的网卡。它还可以将计算机网卡设置为混杂模式,从而监听到连接端口上出现的一切数据。
关键字:嗅探器;协议;数据包;Winpcap;MFC;类
随着网络技术的迅速发展,人们对网络安全的要求越来越高,因此捕获并分析数据包的软件应用日渐广泛。IP网络数据嗅探器是一款用来捕获和分析以太网数据包的软件。它可用于维护网络安全,还可以获得计算机的网卡列表供用户选中要用于监听工作的网卡。它会根据用户自定义的过滤规则捕获数据包。通过分析数据包帧结构,它可以获取该数据包的各层协议内容。它可以将分析结果以及整个数据包在软件主界面中显示,并把数据包写入pcap文件、导出到用户所选路径。
下面给读者介绍IP网络数据嗅探器的总体设计和捕包过程。
1 系统功能设计
本设计的基本功能是捕获并分析数据包,具体包括获取网卡信息、打开网卡;用户自定义过滤规则;捕获数据包;通过分析数据包在网络中第二、三、四层所用协议,获得其源目的MAC地址、IP地址以及端口号,将上述内容以列表控件的报表格式显示在软件主界面中;以树控件的形式将数据帧在数据链路层、网络层和传输层使用的协议数据报各字段信息显示在软件主界面中;以编辑框的形式将数据包内容显示在软件主界面中;最后还将数据导出到pcap格式的文件中。
网卡的配置、过滤器以及数据包的捕获功能的实现主要是通过调用Winpcap提供的API函数完成的,数据解析、显示功能的实现主要是通过自定义函数完成,文件导出部分功能的实现主要通过Windows Shell编程中的函数完成。
2 系统的架构设计
IP网络数据嗅探器的总体设计可以由三个模块构成,自底向上分别是网络嗅探器设置模块、数据包捕获模块和数据处理模块。
网络嗅探器设置模块主要是通过调用Winpcap提供的部分API函数,实现获取网卡列表信息、设置并编译过滤器、将网卡置为混杂模式三个步骤;
数据包捕获模块创建了一个新的线程,利用pcap_loop函数循环读取数据包,直到用户单击操作菜单的“停止”子菜单后就会跳出循环,同时调用pcap_close函数关闭捕获模块。该模块在执行捕包操作时,网卡已经绑定了过滤器,因此网卡只会捕获符合条件的数据包。
数据处理模块用于处理捕获到的数据包。该模块首先通过使用new 语句动态分配内存空间用来存放捕获数据头部和数据信息,再通过自定义数组结构将以上数据添加到数组结构中以供处理数据时使用。
3 基于Winpcap的捕包过程
利用 Winpcap 捕获、分析网络数据时,主要是调用packet.dll和wpcap.dll库中提供的一些函数。下面是基于Winpcap 的网络数据包捕获流程和对部分Winpcap 库函数的介绍。各函数之间参数传递的具体情况如图2所示。
3.1 获取网卡列表
利用Winpcap 捕获数据包时要先获取本地网卡列表,Winpcap提供pcap_findalldevs和pcap_findalldev_ex函数实现以上功能,这两个API 函数都返回一个pcap_if 结构的列表,列表中含有全面的网卡信息,例如网卡设备名、网卡型号以及网卡地址。对于这两个函数,后者是前者的衍生,它不仅可获取本地网卡列表,还可作用于远程计算机,但在pcap.h中对它没有声明,所以调用容易出现错误,本设计选用pcap_findalldevs来获取网卡列表。
3.2 设置并编译过滤器
Winpcap提供pcap_compile和pcap_setfilter函数来实现过滤数据的功能,其中pcap_compile的作用是将用户制定的过滤表达式编译到过滤程序中,pcap_setfilter的作用是把过滤器绑定到抓包过程中,即为抓包过程设置过滤器。若不采用过滤机制时,该过程将省略掉,软件抓取经过的所有数据包。
3.3 网卡设置为混杂模式
Winpcap提供pcap_open和pcap_open_live函数设置网卡工作模式,函数返回用于捕获数据包的网卡描述字,对该网卡的任何操作都要基于这个描述字。函数的promisc参数是1则表示把网卡设置设为混杂模式。本设计调用的是pcap_open_live函数。
3.4 捕获数据包
网卡被打开后,就可以调用pcap_next、pacp_next_ex或pcap_loop函数捕获数据包。pcap_next和pacp_next_ex函数捕获一个可用数据包就返回,pcap_loop函数可以循环捕包捕获多个数据包,直到出现错误为止。本设计调用pcap_loop函数实现循环捕包。
3.5 处理数据包
Winpcap提供的捕包函数pcap_loop会在捕获到数据包的同时调用一个回调函数pcap_handle函数处理数据包,但回调函数具体内容由用户自己编写。本设计在处理数据包方面,除了回调函数以外还有许多其他函数,具体情况见数据包处理模块的详细分析部分。
3.6 关闭捕包系统
Winpcap提供pcap_close函数来关闭网卡,结束循环捕包过程。
IP网络数据嗅探器是Win32平台下的数据包捕获和分析软件,它的设计基于Winpcap系统,主要算法是调用MFC工程新建类,类中封装实现各模块功能所需的成员变量、成员函数。软件性能的优点在于利用Winpcap的NPF构件直接抓取数据链路层的数据包,通过分析操作可得知该数据包在高层所用协议,再根据不同的协议类型对应分析协议各字段内容。