网络抓包与协议分析软件的设计与开发毕业论文.docx
《网络抓包与协议分析软件的设计与开发毕业论文.docx》由会员分享,可在线阅读,更多相关《网络抓包与协议分析软件的设计与开发毕业论文.docx(26页珍藏版)》请在冰豆网上搜索。
网络抓包与协议分析软件的设计与开发毕业论文
毕业设计(论文)
题目:
网络抓包与协议分析软件
的设计与开发
毕业论文(设计)原创性声明
本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作与取得的研究成果。
据我所知,除文中已经注明引用的容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。
对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示意。
作者签名:
日期:
毕业论文(设计)授权使用说明
本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。
有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。
学校可以公布论文(设计)的全部或部分容。
的论文(设计)在解密后适用本规定。
作者签名:
指导教师签名:
日期:
日期:
注意事项
1.设计(论文)的容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体与大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
网络抓包与协议分析软件的设计与开发
摘要:
网络数据包捕获是进行网络分析的基础,通过对Windows操作系统平台下网络数据包捕获模型的论述,重点对基于NDIS的优秀包捕获开发包WinPcap的结构和功能的进行了详细的介绍和分析,实现了如何在VC++6.0环境下借助WinPcap提供的各个接口函数对网卡进行编程进而对网络数据包进行捕获和分析的方法,突出叙述了数据包捕获在网络分析中的应用。
关键字:
数据包捕获,数据包,WinPcap
Designanddevelopmentapacketcapture
andprotocolanalysissoftware
Abstract:
Networkpacketcaptureisthepreconditionfornetworkanalysis,throughtheanalysisofthemodelsofnetworkdatapacketcaptureinWindows,thestructureandfunctionofWinPcapbasedonNDISisanalyzedandintroducedindetail,andhowtoprogramonthenetworkadapterandhowtocaptureandanalyzethenetworkdatapacketsthroughWinPcaparerealizedundertheenvironmentofVC6.0++,theapplicationsofnetworkdatacapturefornetworkanalysisisnarratedindetail.
Keywords:
packetcapture,datapacket,WinPcap
1绪论
1.1课题来源
随着网络技术的飞速发展和网络时代的到来,互联网的影响已经渗透到国民经济的各个领域和人民生活的各个方面,全社会对网络的依赖程度越来越大,整个世界通过网络正在迅速地融为一体,但由于计算机网络具有联结形式多样性、终端分布不均匀性和网络的开放性、互联性等特征,致使网络易受黑客、恶意软件和其他不轨的攻击。
广义来说,凡是涉与到网络上信息的性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全所要研究的领域。
网络安全涉与的容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。
技术方面主要侧重于防外部非法用户的攻击,管理方面则侧重于部人为因素的管理。
如何更有效地保护重要的信息数据、提高计算机网络系统的安全性已经成为所有计算机网络应用必须考虑和必须解决的一个重要问题。
可以这样来定义网络数据安全:
所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时系统能够连续、可靠地运行,网络服务不被中断。
但在现实中,绝对安全的网络是没有的[1]。
据IT界企业团体ITAA的调查显示,美国90%的IT企业对黑客攻击准备不足。
目前美国75%一85%的都抵挡不住黑客的攻击,约有75%的企业网上信息失窃,其中25%的企业损失在25万美元以上.因此了解网络面临的各种威胁,防和消除这些威胁,实现真正的网络安全已经成了网络发展中最重要的事情。
1.2当今网络数据安全现状
计算机网络的核心是网络协议,所以研究协议与网络安全的关系就是至关重要的。
现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好的、通信的双方充分信任的基础。
在通常的网络环境之下,用户的信息包括口令都是以明文的方式在网上传输的,只要将网络接口设置成监听模式,便可以源源不断地将网上传输的信息截获,因此进行网络监听从而获得用户信息并不是一件困难的事情。
例如目前使用最广泛的TCP/IP协议就存在很多安全缺陷,而FTP、POP和Telnet协议在本质上也是不安全的,从而很多网络的攻击就是针对这些不安全协议进行的。
1994年一个最大的嗅探器(Sniffer,网络数据监听器)攻击被发现,这次攻击被人们普遍认为是记载中最为严重的一次,攻击者处于Rahul.Net,使许多以FTP、Telnet或远程登陆的主机系统都受到了危害。
在这件事故中,嗅探器只运行了18个小时。
在这段时间里,有几百台主机被泄密。
受攻击者包括268个站点,如麻省理工学院、美国海军和空军、SUN微系统公司、IBM、NASA、CERFNET和加拿大、以色列、荷兰、比利时的一些大学的机器。
协议的安全验证方式也是有弱点的,就是很容易受到“中间服务器”方式的攻击。
所谓“中间服务器”攻击方式,就是“中间服务器”冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
服务器和用户之间的数据传送被“中间服务器”转发并做了手脚之后,就会出现很严重的问题。
例如:
冒充域名服务器的攻击,也就是DNS欺骗。
它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX,网址为XXX,而实际上登录的确实IP地址YYY.YY.YY.YY上的XXX,用户上网就只能看到攻击者的主页,而不是用户想要取得的的主页了,这个网址是攻击者用以窃取网上银行登录证书以与信息的假冒网址。
据统计,目前网络攻击手段有数千种之多;美国商业杂志《信息周刊》公布的一项调查报告称,黑客攻击和病毒等安全问题在2000年就造成了上万亿美元的经济损失,在全球围每数秒钟就发生一起针对网络的不同形式的攻击事件。
1.3网络数据安全的技术研究
为了保证网络的安全,防止网络攻击,除了对信息采用加密技术之外,还有就是与网络协议相关的网络安全手段,例如防火墙技术、入侵监测技术、安全扫描技术、协议分析技术和数据包生成技术等。
这些技术中,数据包的捕获和分析是最首要的手段,它是诸多网络安全技术实现的基础。
2主要技术介绍
2.1数据包的介绍
“包”(Packet)是TCP/IP协议通信传输中的数据单元,一般也称“数据包”。
有人说,局域网中传输的不是“帧”(Frame)吗?
没错,但是TCP/IP协议是工作在OSI模型第三层(网络层),第四层(传输层)上的,而帧是工作在第二层(数据链路层)。
上一层容由下一层的容来传输,所以在局域网中,“包”是包含在“帧”里的。
用一个形象一些的例子对数据包的概念加以说明:
我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。
必须把装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。
这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。
包”听起来非常抽象,那么是不是不可见的呢?
通过一定技术手段,是可以感知到数据包的存在的。
比如在能上网的情况下,把鼠标移动到任务栏右下角的网卡图标上单击就会弹出一个窗口,如图2-1,就可以看到“发送:
××包,收到:
××包”的提示。
图2-1网络连接状态
我们上网打开网页,这个简单的动作,就是我们先发送数据包给,接收到了之后,根据发送的数据包的IP地址,返回网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。
如果能把数据包捕获,通过分析这些数据,我们就可以知道网络中这些数据包传输的信息。
那么如何捕获这些数据包呢?
2.2网络数据包捕获原理
由于目前用的最多的网络形式是以太网[2],在以太网上,数据是以被称为帧的数据结构为单位进行交换的,而帧(数据包)是用被称为带碰撞检测的载波侦听多址访问即CSMA/CD(carriersensemultipleaccesswimcollisiondctection)的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已。
正是这种基于CSMS/CD的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能,即通过对网络接口的设置可以使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时分析这些数据的容,进而分析网络当前状态和整体布局。
这里,通过设置硬路由器的监听端口来捕获数据包的方式不再本文讨论围。
从广义的角度上看,一个包捕获机制包含三个主要部分:
首先是最底层针对特定操作系统的包捕获机制,然后是最高层针对用户程序的接口,第三部分是包过滤机制。
不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看小异。
数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。
而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。
值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。
对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。
这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。
包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。
2.3网络数据包的捕获方法
2.3.1原始套接字
套接字[3](Sock)是网络应用编程接口。
应用程序可以使用它进行网络通信而不需要知道底层发生的细节。
有时候需要自己生成一些定制的数据包或者功能并希望绕开套接字的功能,原始套接字(RawSocket)就满足了这样的要求。
原始套接字能够生成自己的数据报文,包括报送和数据报本身的容。
通过原始套接字,可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。
原始套接字可以用来发送和接收IP层以上的原始数据包,比如ICMP,TCP,UDP,而且能够对网络底层的传输机制进行控制。
原始套接字的作用主要有三个方面:
1)接收发向本机的ICMP,IGMP协议包,或者发送这些协议包;
2)接收发向本机的IP包;
3)发送自定义的IP包。
2.3.2LibPcap
LibPcap[4]是一个广泛应用的系统抓包库。
LibPcap是一种与系统无关,采用分组捕获机制的分组捕获函数库,用于访问数据链路层,它在不同的平台上采用统一的编程接口,使用LibPcap编写的程序可以自由地跨平台使用。
同时LibPcap是一个独立于系统接口的用户级的抓包库,它为底层网络监听提供了可移植框架。
它的应用包括网络统计集合,安全监听,网络调试等。
2.3.3WinPcap
WinPcap[5]是LibPcap的Windows版本,它是一个基于Win32的捕获数据包和网络分析的体系结构,它包括一个核级的包过滤器,一个底层的动态库(Packet.dll),一个高层并且与系统无关的库(WPcap.dll,基于LibPcap0.6.2版本)。
WinPcap是集成于Windows95,98,ME,NT,2000和XP操作系统的设备驱动程序,它可以从网卡捕获或者发送原始数据,同时能够过滤并且仓储数据包。
开发WinPcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。
它提供以下四项功能:
1)捕获原始数据报,包括共享网络上各主机发送/接收的以与相互之间交换的数据报;
2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
3)在网络上发送原始的数据报;
4)收集网络通信过程中的统计信息。
2.3.4JPcap
JPcap[6]是一个能够捕获,发送网络数据包的Java类库包。
这个包用到了LibPcap和原始套接字API。
目前JPcap在FreeBSD3.x,LinuxRedHat6.1,Solaris和MicrosoftWindows2000/XP系统上已经做过测试,并且支持Ethernet,IPv4,IPv6,ARP/RARP,TCP,UDP,ICMPv4协议。
JPcap是一个Java类集合,它为网络数据包的捕获提供接口和系统支持。
最初版本是2000年6月发布的JPcap0.01版,此后几经修改,到现在最新的JPcap0.7版。
2.4WinPcap研究
WinPcap是windows平台下一个免费、公共的网络访问系统,是为Linux下的Libpcap移植到Windows平台下实现数据包捕获而设计的函数库,在设计WinPcap时参照了Libpcap,使用方法也与Libpcap相似,基于Libpcap的程序可以很容易的移植到Windows平台下。
这个数据包捕获架构是由加州大学和LawrenceBerkeley实验室与其投稿者联合开发的,他们在1999年3月31日推出了1.0版,提供了用户级BPF过滤;1999年8月21日推出了2.0版,将BPF过滤增加到核中并增加了核缓存;2001年3月15日推出了2.1版,该版对libpcap0.5.2进行了升级,并可支持更多的网络类型;2001年1月30日推出了2.2版;2002年3月28日推出了2.3版;2003年1月lO日推出了3.O版,增加了NPF设备驱动的一些新的特性与优化方案,在wpcap.dll中增加了一些函数等等功能。
WinPcap的最新版本是4.1.4。
WinPcap的官方主页是.wpcap.org,可以在其主页上下载这个软件与其源代码,更重要的是,上还有很多开发文档,对于利用WinPcap作为工具开发网络安全软件的编程人员有很大帮助。
WinPcap提供了四项功能:
1)捕获原始数据报,包括共享网络上各主机发送/接收的以与相互之间交换的数据报;
2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
3)在网络上发送原始的数据报;
4)收集网络通信过程中的统计信息。
WinPcap的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据包,也就是说,WinPcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。
因此,它不能用于QoS调度程序或个人防火墙。
目前,WinPcap开发的主要对象是windowsNT/2000/XP,这主要是因为在使用WinPcap的用户中只有一小部分是仅使用Windows95/98/Me,并且微软也已经放弃了对win9x的开发。
有个软件叫snifferpro可以作网管软件用,有很多功能,可监视网络运行情况,每台网机器的数据流量,实时反映每台机器所访问IP以与它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可从中找到用户名和密码,还有ftp用户名和密码。
它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件。
还有一个简单的监听软件叫Passwordsniffer,可截获用户名和密码,还有ftp用户名和密码,它只能用在HUB网络上。
著名软件tcpdump与idssnort都是基于libpcap编写的,此外Nmap扫描器也是基于libpcap来捕获目标主机返回的数据包的。
WinPcap提供给用户两个不同级别的编程接口:
一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。
对于一般的要与unix平台上libpcap兼容的开发来说,使用wpcap.dll是当然的选择。
2.5WinPcap部结构
Winpcap是针对Win32平台上的抓包和网络分析的一个架构,它由核级的网络组包过滤器(NetgroupPacketFilter,NPF)、用户级的动态库Packet.dll和Wpcap.dlI等3个模块组成[7]。
1)网络组包过滤器。
它是运行于操作系统核中的驱动程序,它直接与网卡驱动程序进行交互,获取在网络上传输的原始数据包。
NPF与操作系统有关,WinPcap开发组针对不同的Windows操作系统提供了不同版本的NPF。
在Win95/98/ME系统中,它以VXD文件形式存在,在WindowsNT和Windows2000系统中,它以SYS文件形式存在。
该模块提供了抓取数据包以与发送数据包的基本功能,此外还提供了一些高级功能,如数据包过滤系统和检测引擎。
2)低级动态库。
Pactet.dll用于在Win32平台上为数据包驱动程序提供一个公共的接口。
不同的Windows版本在用户态和核态之间提供互不一样的接口,而Pactet.dll可以屏蔽这些接口区别,提供一个与系统无关的API。
基于Pactet.dll开发的数据包截获程序可以运行于不同的Win32平台而不必重新进行编译。
Pactet.dll可以执行如获取适配器名称、动态驱动器加载以与获得主机掩码与以太网冲突次数等低级操作。
3)高级动态库。
Wpcap.dll模块与Unix系统下的BSD截获架构提供的Libpcap库完全兼容。
它提供了一组功能强大且跨平台的函数,利用这些函数可以不去关心适配器和操作系统的类型。
Wpcap.dll含有诸如产生过滤器、定义用户级缓冲以与包注入等高级功能。
编程人员既可以使用包含在Pactet.dll中的低级函数直接进入核级调用,也可以使用由Wpcap.dll提供的高级函数调用,这样功能更强,使用也更为方便。
Wpcap.dll的函数调用会自动调用Pactet.dll中的低级函数,并且可能被转换成若干个NPF系统调用。
2.6WinPcap的主要函数库
Winpcap函数库主要有如下函数:
1)intpcap_findalldevs(pcap_if_t**,char*)
用来获得网卡的列表
2)voidpcap_freealldevs(pcap_if_t*)
与intpcap_findalldevs(pcap_if_t**,char*)配套使用,当不需要网卡列表时,用此函数释放空间
3)pcap_t*pcap_open_live(constchar*,int,int,int,char*)
用来得到一个包抓取得描述符
4)Intpcap_loop(pcap_t*,int,pcap_handler,u_char*)
捕获数据包,不会响应pcap_open_live()中设置的超时时间
5)intpcap_dispatch(pcap_t*,int,pcap_handler,u_char*)
捕获数据包。
可以不被阻塞
6)intpcap_next_ex(pcap_t*,structpcap_pkthdr**,constu_char**)
捕获数据包
7)intpcap_compile(pcap_t*,structbpf_program*,constchar*,int,bpf_u_int32)
编译一个过滤设备,与pcap_setfilter()配合使用
8)intpcap_setfilter(pcap_t*,structbpf_program*)
用来联系一个在核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中
3系统设计
3.1捕获数据的分析与还原
对捕获数据的解析,其主要依据是网络协议中定义的各种包的类型和包的格式,下面依次对这些数据的格式与协议进行介绍与分析。
3.1.1802.3标准的数据帧分析与还原
根据TCP/IP协议,机器接收到一个以太网数据包时,数据从协议栈中由底向上升,同时去掉各层协议加上的报文首部,每层协议都要检查报文首部的协议表示,以确定数据的上层协议。
根据以太网数据链路层的帧格式,网络适配器的驱动程序会自动计算校验和,并取走帧中的前同步码和校验和字段,因此WinPcap接收的数据包仅仅是其中的帧头和载荷部分,即捕获到的是帧结构中的“目标MAC地址”、“源MAC地址”、“帧类型”、“帧中数据”这四部分。
在这种情况下,要实现对数据帧的还原,只需要将捕获的数据帧的前12个字节分别转换为十六进制数据,就可以清楚地看到MAC地址,并通过对比本机的MAC地址,还可以初步判断出该数据帧是本机发送的或是接收到的。
3.1.2IP报文的分析与还原
首先来看下IP数据报格式[8],如图3-1所示:
图3-1IP数据报格式
版本:
4位,标识IP版本号。
目前有IPv4、IPv6。
我们目前所用的IP协议基本都是IPv4版本。
首部长度:
4位,度指的是首部占32bit字的数目,包括任何选项。
由图3-1可知首部所占字节数为(4+4+8+16+16+3+13+8+8+16+32+32+0)=160bit,正好是32bit的5倍,所以首部长度最小为5。
如果选项字段有其它数据,则这个值会大于5。
由上面也可知IP首部最小长度为20字节,最大长度为(2的4次方-1)*32/8=60字节。
服务类型:
8位,其中:
优先权:
3位,设置了数据包的重要性,取值越大数据越重要,取值围为:
0(正常)-7(网络控制)。
TOS:
4位,分别表示最小延时、最大吞吐量、最高可靠性、最小费用。
如果4位TOS子字段均为0,那么就意味着是一般服务。
未使用:
1位,必须置0。
总长度:
16位,总长度指首部和数据之和的长度,以字节为单位。
利用首部长度字段和总长度字段,就可以知道IP数据报中数据容的起始位置和长度。
由于该字段长16比特,所以IP数据报最长可达65535字节。
标识:
16位,唯一地标识主机发送的每一份数据报。
通常每发送一份报文它的值就会加1。
IP软件在存储器中维持一