基于winpcap的嗅探器设计与实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机与信息学院《计算机网络系统实践》报告2013年9月25设计题目:嗅探器的设计与实现学生姓名:***学号:2010****专业班级:信息安全****一、设计要求1.不限平台,可以使用Libpcap、WinPcap或Linux的原始套接字;2.实现一个功能比较简单的、具有图形界面的Sniffer,主线程响应用户界面操作,工作线程完成抓包等工作;3.能够解析出IP层和传输层的协议头,能够过滤TCP、UDP等数据包;4.能够输出文本方式传送的数据包的内容;5.能够进行简单的流量统计。二、开发环境与工具操作系统:windows7开发工具:visualstudio开发语言:C++附加库:Winpcap三、设计原理网络嗅探器是一种常用的监听网络的工具。所谓嗅探器(Sniffer),是一种利用计算机网络接口截获网络数据的软件或硬件,可用于网络管理、网络协议分析以及网络安全等众多方面。嗅探器不同于一般的键捕获工具,后者只能捕获当地终端控制台上的按键内容,而嗅探器所“嗅”到的是动态的以信息包形式(如IP数据包或者以太网包)封装的信息流。其中可能携带了重要数据或敏感信息。可以将这些捕获到的信息包存档,以利用相应工具可以作进一步分析。计算机网络的设计为嗅探器的使用创造了最基本的条件。在目前的网络环境中,所有计算机节点都是共享传输介质,任意节点发出或发往任意节点的数据帧必将经过网内每一个节点的网络接口,此时只需对嗅探节点的网络接口(网卡)进行适当的设置便可为实现嗅探的做好准备工作。在计算机网络系统中,网卡是用来接收网络上其他节点发来的数据帧,其内嵌的单片处理程序会检测数据帧来源的MAC地址,并根据网卡所设置的接收方式来是否接收处理数据,如果认为应该处理,则网卡就会产生中断信号通知中央处理器,接收该数据帧并传输给操作系统处理。否则就简单丢弃,所对应节点的网卡就截断,计算机的中央处理器并不参与。网卡是网络中节点主机的关键硬件设备。对数据的接收一般有四种设置模式:广播模式:接收在网络中进行广播数据信息。组播模式:接收组播数据信息。单播模式:只有匹配的目的网卡才能接收数据信息。混杂模式:网卡能够可以接收一切通过它的数据信息。四、系统功能描述及软件模块划分系统功能设计本系统的基本功能为实现网络数据包的捕获,并将其数据内容解析显示。网络数据包捕获功能主要负责从网络中捕获和过滤数据,这可以通过调用winPcap提供的丰富的API函数来实现;数据解析及显示部分主要负责界面数据转化、解析、处理、格式化、协议分析等,这一部分主要通过MFC来设计一个单文档图形用户界面GUI,解析结果将通过MFC的类库显示到GUI中系统总系结构网络嗅探器的整体设计由三个模块组成,自底向上分别是嗅探器设置模块,数据包捕获模块,解析和显示模块。嗅探器设置模块主要调用winPcaP提供的API,分为获取网络设备信息,设置并编译过滤器,打开网络设备三个步骤。数据包捕获模块创建了新的线程,利用了winPcap的非回调函数Pcap_next_ex()函数从winPcap底层驱动的数据缓冲区中读取数据包,并将数据包存储在系统临时文件中,以便之后的分析。用Pcap_open_offline()函数从离线文件中读取包。读取到的任意一个符合捕获条件数据包,将其内容解析,并显示本数据包。捕获完成后,进人解析和显示模块。(嗅探器总体结构如图1)图1.嗅探器总体结构五、设计步骤嗅探器的设置模块a.获取已连接的网络设备列表,winPcap提供了pcap_findalldevs_ex()函数,这个函数返回一个PcaP-if结构的链表,每个这样的结构都包含了一个适配器的详细信息。b.打开网络设备,winPcap提供了pcap_open()函数,该函数第一参数制定要捕获数据包的哪些部分,第二参数用来制定适配器是否为混杂模式,第三参数为读取数据的超时时间,当适配器被打开后,就可以进行捕获工作了;c.设置过滤器,winPcap中用来过滤数据包的函数是pcap_compile()和pcap_setfilter()。pcap_compile()它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。pcap_setfilter()将一个过滤器与内核捕获会话相关联。当pcap_set_filter()被调用时,这个过滤器将被应用到来自网络的所有数据包,并且,所有的符合要求的数据包(即那些经过过滤器以后,布尔表达式为真的包),将会立即复制给应用程序。数据包的捕获模块该部分创建了一个用于捕获数据包的线程,在该线程中调用winPcap提供的pcap_next_ex()函数从底层驱动数据缓冲区中读取数据包,该函数接受已打开的网络设备句柄,返回捕获数据包的实体,并用pcap_dump函数将每一个数据包写人临时文件中。解析与显示模块该部分在接收到用户发出的捕获完成消息后,将数据包从离线文件中逐条取出并进行解析和显示。将解析完毕数据包中的各项内容填人已经预先声明的协议的数据结构中,包括(序号,捕获时间,以太帧长度,传输层协议,源IP地址,目的IP地址,源MAC地址,目的MAC地址),然后将数据结构添加到列表视图中WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络的开发工具包(编程API)。大多数Windows网络应用程序都是通过WinsockAPI(Windows套接口)这类高级编程接口访问网络的。这种方法允许在网络上进行简单的数据传送,因为操作系统的TCP/IP协议栈实现软件会处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。然而,有时候“简便方法”并不能满足实际需要。有些程序希望绕过TCP/IP协议栈,直接处理底层网络中的通信数据,它们需要对网络进行底层进行直接访问,即在没有类似协议栈(TCP/IP协议栈)的实体介入条件下对网络进行原始访问。络程序实际上是绕开操作系统的TCP/IP协议栈直接通过底层网络发送数据,因此,网络程序可以实现一些更低级、更灵活的功能。2、WinPcap的目的和用途开发WinPcap的目的是为Win32应用程序提供一种直接访问底层网络的能力。通过WinPcap,网络应用程序可以实现如下功能:1)捕获原始数据包,包括发送到本主机以及在共享网络上的数据包。2)数据过滤。在将数据包发送给应用程序之前按照用户的规定对捕获的数据包进行过滤。3)发送原始数据包。向网络发送原始数据包。4)数据包统计。对网络通信进行统计。3、基于WinPcap可以开发的网络应用程序基于WinPcap可以开发很多网络应用程序,典型的包括:1)网络和协议分析软件2)网络监听软件3)网络通信量记录软件4)网络数据生成软件5)用户机网桥和路由器6)网络入侵探测系统7)网络扫描软件8)网络安全工具二、WinPcap的体系结构分析1、WinPcap的组成与结构如图2.1,WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。4向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。简单来讲,WinPcap典型的开发和运行环境是windowsNT/2000/XP。当然,早期的WinPcap也支持windows95/98/Me,但是,我们不推荐在windows95/98/Me下开发和运行基于WinPcap的网络应用。二、WinPcap的体系结构分析1、WinPcap的组成与结构如图2.1,WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。1)数据包监听设备驱动程序技术实现上,为了实现抓包,系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket)。这就要求WinPcap的一部分运行在操作系统核心内部,直接与网络接口驱动交互。由于这个部分是系统依赖(systemdependent)的,在Winpcap的解决方案中它被视为是一个设备驱动,称作NPF(NetgroupPacketFilter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,WindowsNT4,Windows2000和WindowsXP提供了不同版本的驱动(在Windows95/98/ME中是VXD文件,在WindowsNT/2000中是SYS文件)。这些驱动不仅提供了基本的特性(例如抓包、发送原始数据包——注入数据包),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集概括地讲,数据包监听设备驱动程序直接从数据链路层抓取网络数据包并过滤,将数据包不加修改地传递给运行在用户层的应用程序。它在不同的WINDOWS系统下是不同。数据包监听设备驱动程序支持BPF过滤机制,可以灵活地设置过滤规则。2)底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)为了方便编程,WinPcap必须提供一个编程接口(API),这就是WinPcap的底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)。这里,packet.dll提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;wpcap.dll导出了一组更强大的与libpcap一致的高层抓包函数库(captureprimitives),这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行底层动态链接库运行在用户层,它将应用程序和数据包监听设备驱动程序隔离开来,使得应用程序可以不加修改地在不同的WINDOWS系统上运行。高级的静态链接库和应用程序编译在一起,它使用低级动态链接库提供的服务,向应用程序提供完善的监听接口。概括来讲,WinPcap包含了一个最优化的内核模式驱动——称作NetgroupPacketFilter(NPF),和一套与libpcap兼容的用户级函数库。WinPcap使Unix平台下的应用程序能方便的移植到Win32平台下,并且它能使一套很大的Unix函数库只需通过简单的重新编译就立刻在Win32平台下使用。而且,由于网络监听的重要性,WinPcap还为此提供了特殊的系统调用函数。实际上,Windows环境下的WinPcap与Unix环境下的BerkeleyPacketFilter(BPF)在体系架构上是基本一致的。在Unix环境下,程序员只需要了解Libpcap提供的编程接口即可,Libpcap将应用程序与操作系统内核之间的相互作用隐藏起来,提供了一套与用户程序联系的函数和强大的捕获数据包的抽象接口。在Windows环境下,程序员主要基于wpcap.dll提供的编程接口开发应用程序。当然,程序要也可以使用packet.dll、NPF提供的编程接口,只是后者提供的API更加底层。六、关键问题及其解决方法界面初始化BOOLCzszhangDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu-Ap

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功