网络抓包与协议分析软件的设计与开发_毕业设计论文.doc

上传人:西安人 文档编号:3964846 上传时间:2019-10-11 格式:DOC 页数:38 大小:2.78MB
返回 下载 相关 举报
网络抓包与协议分析软件的设计与开发_毕业设计论文.doc_第1页
第1页 / 共38页
网络抓包与协议分析软件的设计与开发_毕业设计论文.doc_第2页
第2页 / 共38页
网络抓包与协议分析软件的设计与开发_毕业设计论文.doc_第3页
第3页 / 共38页
网络抓包与协议分析软件的设计与开发_毕业设计论文.doc_第4页
第4页 / 共38页
网络抓包与协议分析软件的设计与开发_毕业设计论文.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《网络抓包与协议分析软件的设计与开发_毕业设计论文.doc》由会员分享,可在线阅读,更多相关《网络抓包与协议分析软件的设计与开发_毕业设计论文.doc(38页珍藏版)》请在三一文库上搜索。

1、 毕业设计(论文)题 目:网络抓包与协议分析软件的设计与开发30毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期: 毕业论文(设计)授权使用说明本论文(设计)作者完全了解*学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学

2、校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。 作者签名: 指导教师签名: 日期: 日期: 注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。

3、4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订目 录1 绪论11.1 课题来源11.2 当今网络数据安全现状11.3 网络数据安全的技术研究22 主要技术介绍

4、32.1 数据包的介绍32.2 网络数据包捕获原理42.3 网络数据包的捕获方法52.3.1 原始套接字52.3.2 LibPcap52.3.3 WinPcap52.3.4 JPcap62.4 WinPcap研究62.5 WinPcap内部结构72.6 WinPcap的主要函数库83 系统设计103.1 捕获数据的分析与还原103.1.1 802.3标准的数据帧分析与还原103.1.2 IP报文的分析与还原103.1.3 UDP数据包的封装123.1.4 TCP数据包的封装143.1.5 ICMP数据包的封装154 实现与分析164.1 WinPcap环境配置164.1.1 WinPcap下载

5、164.1.2 WinPcap配置164.2 程序的实现164.2.1 网络数据捕获的基本流程164.2.2获取网卡信息174.2.3捕获数据包184.2.4分析数据包204.3 程序编译中出现的问题234.4 问题的解决234.5 程序功能234.5.1 程序主界面234.5.2 工具栏244.6程序运行结果265 总结和展望285.1 本文主要工作285.2 展望28致谢语29参考文献30网络抓包与协议分析软件的设计与开发摘要:网络数据包捕获是进行网络分析的基础,通过对Windows 操作系统平台下网络数据包捕获模型的论述,重点对基于NDIS的优秀包捕获开发包WinPcap的结构和功能的进

6、行了详细的介绍和分析,实现了如何在VC+ 6.0 环境下借助WinPcap提供的各个接口函数对网卡进行编程进而对网络数据包进行捕获和分析的方法,突出叙述了数据包捕获在网络分析中的应用。关键字:数据包捕获,数据包,WinPcapDesign and development a packet capture and protocol analysis software Abstract:Network packet capture is the precondition for network analysis,through the analysis of the models of netwo

7、rk data packet capture in Windows,the structure and function of WinPcap based on NDIS is analyzed and introduced in detail,and how to program on the network adapter and how to capture and analyze the network data packets through WinPcap are realized under the environment of VC 6.0+,the applications

8、of network data capture for network analysis is narrated in detail.Key words:packet capture,data packet,WinPcap1 绪论1.1 课题来源随着网络技术的飞速发展和网络时代的到来,互联网的影响已经渗透到国民经济的各个领域和人民生活的各个方面,全社会对网络的依赖程度越来越大,整个世界通过网络正在迅速地融为一体,但由于计算机网络具有联结形式多样性、终端分布不均匀性和网络的开放性、互联性等特征,致使网络易受黑客、恶意软件和其他不轨的攻击。广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真

9、实性和可控性的相关技术和理论都是网络安全所要研究的领域。网络安全涉及的内容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。技术方面主要侧重于防范外部非法用户的攻击,管理方面则侧重于内部人为因素的管理。如何更有效地保护重要的信息数据、提高计算机网络系统的安全性已经成为所有计算机网络应用必须考虑和必须解决的一个重要问题。可以这样来定义网络数据安全:所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时系统能够连续、可靠地运行,网络服务不被中断。但在现实中,绝对安全的网络是没有的1。据IT界企业团体ITAA的调查显示

10、,美国90的IT企业对黑客攻击准备不足。目前美国75一85的网站都抵挡不住黑客的攻击,约有75的企业网上信息失窃,其中25的企业损失在25万美元以上因此了解网络面临的各种威胁,防范和消除这些威胁,实现真正的网络安全已经成了网络发展中最重要的事情。1.2 当今网络数据安全现状计算机网络的核心是网络协议,所以研究协议与网络安全的关系就是至关重要的。现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好的、通信的双方充分信任的基础。在通常的网络环境之下,用户的信息包括口令都是以明文的方式在网上传输的,只要将网络接口设置成监听模式,便可以源源不断地将网上传输的信息截获,因此进行网络

11、监听从而获得用户信息并不是一件困难的事情。例如目前使用最广泛的TCP/IP协议就存在很多安全缺陷,而FTP、POP和Telnet协议在本质上也是不安全的,从而很多网络的攻击就是针对这些不安全协议进行的。1994年一个最大的嗅探器(Sniffer,网络数据监听器)攻击被发现,这次攻击被人们普遍认为是记载中最为严重的一次,攻击者处于Rahul.Net,使许多以FTP、Telnet或远程登陆的主机系统都受到了危害。在这件事故中,嗅探器只运行了18个小时。在这段时间里,有几百台主机被泄密。受攻击者包括268个站点,如麻省理工学院、美国海军和空军、SUN微系统公司、IBM、NASA、CERFNET和加拿

12、大、以色列、荷兰、比利时的一些大学的机器。协议的安全验证方式也是有弱点的,就是很容易受到“中间服务器”方式的攻击。所谓“中间服务器”攻击方式,就是“中间服务器”冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。服务器和用户之间的数据传送被“中间服务器”转发并做了手脚之后,就会出现很严重的问题。例如:冒充域名服务器的攻击,也就是DNS欺骗。它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为WWW.XXX.COM,而实际上登录的确实IP地址YYY.YY.YY.YY上的WWW.

13、XXX.COM ,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这个网址是攻击者用以窃取网上银行登录证书以及帐号信息的假冒网址。据统计,目前网络攻击手段有数千种之多;美国商业杂志信息周刊公布的一项调查报告称,黑客攻击和病毒等安全问题在2000年就造成了上万亿美元的经济损失,在全球范围内每数秒钟就发生一起针对网络的不同形式的攻击事件。1.3 网络数据安全的技术研究为了保证网络的安全,防止网络攻击,除了对信息采用加密技术之外,还有就是与网络协议相关的网络安全手段,例如防火墙技术、入侵监测技术、安全扫描技术、协议分析技术和数据包生成技术等。这些技术中,数据包的捕获和分析是最首要的

14、手段,它是诸多网络安全技术实现的基础。2 主要技术介绍2.1 数据包的介绍“包”(Packet)是TCP/IP协议通信传输中的数据单元,一般也称“数据包”。有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层),第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这

15、样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在能上网的情况下,把鼠标移动到任务栏右下角的网卡图标上单击就会弹出一个窗口,如图2-1,就可以看到“发送:包,收到:包”的提示。图2-1 网络连接状态我们上网打开网页,这个简单的动作,就是我们先发送数据包给网站,网站接收到了之后,根据发送的数据包的IP地址,返回网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。如果能把数据包捕获,通过分析这些数据,我们就可以知道网络中这些

16、数据包传输的信息。那么如何捕获这些数据包呢?2.2 网络数据包捕获原理由于目前用的最多的网络形式是以太网2,在以太网上,数据是以被称为帧的数据结构为单位进行交换的,而帧(数据包)是用被称为带碰撞检测的载波侦听多址访问即CSMA/CD(carrier sense multiple access wim collision dctection)的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已。正是这种基于CSMS/CD的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能,即通过对网络接口的设置

17、可以使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时分析这些数据的内容,进而分析网络当前状态和整体布局。这里,通过设置硬路由器的监听端口来捕获数据包的方式不再本文讨论范围内。从广义的角度上看,一个包捕获机制包含三个主要部分:首先是最底层针对特定操作系统的包捕获机制,然后是最高层针对用户程序的接口,第三部分是包过滤机制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接

18、传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。2.3 网络数据包的捕获方法2.3.1 原始套接字套接字3(Sock)是网络应用编程接口。应用程序可以使用它进行网络通信而不需要知道底层发生的细节。有时候需要自己生成一些定制的数据包或者功能并希望绕开套接字的功能,原始套接字(Raw Soc

19、ket)就满足了这样的要求。原始套接字能够生成自己的数据报文,包括报送和数据报本身的内容。通过原始套接字,可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。原始套接字可以用来发送和接收IP层以上的原始数据包,比如ICMP,TCP,UDP,而且能够对网络底层的传输机制进行控制。原始套接字的作用主要有三个方面:1)接收发向本机的ICMP,IGMP协议包,或者发送这些协议包;2)接收发向本机的IP包;3)发送自定义的IP包。2.3.2 LibPcapLibPcap4是一个广泛应用的系统抓包库。LibPcap是一种与系统无关,采用分组捕获机制的分组捕获函数库,用于访问

20、数据链路层,它在不同的平台上采用统一的编程接口,使用LibPcap编写的程序可以自由地跨平台使用。同时LibPcap是一个独立于系统接口的用户级的抓包库,它为底层网络监听提供了可移植框架。它的应用包括网络统计集合,安全监听,网络调试等。2.3.3 WinPcapWinPcap5是LibPcap的Windows版本,它是一个基于Win32的捕获数据包和网络分析的体系结构,它包括一个内核级的包过滤器,一个底层的动态链接库(Packet.dll),一个高层并且与系统无关的库(WPcap.dll,基于LibPcap0.6.2版本)。WinPcap是集成于Windows95,98,ME,NT,2000和

21、XP操作系统的设备驱动程序,它可以从网卡捕获或者发送原始数据,同时能够过滤并且仓储数据包。开发WinPcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。它提供以下四项功能:1) 捕获原始数据报,包括共享网络上各主机发送/接收的以及相互之间交换的数据报;2) 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3) 在网络上发送原始的数据报;4) 收集网络通信过程中的统计信息。2.3.4 JPcapJPcap6是一个能够捕获,发送网络数据包的Java类库包。这个包用到了LibPcap和原始套接字API。目前JPcap在FreeBSD 3.x,Linux RedH

22、at 6.1,Solaris和Microsoft Windows 2000/XP系统上已经做过测试,并且支持Ethernet,IPv4,IPv6,ARP/RARP,TCP,UDP,ICMPv4协议。JPcap是一个Java类集合,它为网络数据包的捕获提供接口和系统支持。最初版本是2000年6月发布的JPcap0.01版,此后几经修改,到现在最新的JPcap0.7版。2.4 WinPcap研究WinPcap是windows平台下一个免费、公共的网络访问系统,是为Linux下的Libpcap移植到Windows平台下实现数据包捕获而设计的函数库,在设计WinPcap时参照了Libpcap,使用方法

23、也与Libpcap相似,基于Libpcap的程序可以很容易的移植到Windows平台下。这个数据包捕获架构是由加州大学和Lawrence Berkeley实验室及其投稿者联合开发的,他们在1999年3月31日推出了1.0版,提供了用户级BPF过滤;1999年8月21日推出了2.0版,将BPF过滤增加到内核中并增加了内核缓存;2001年3月15日推出了2.1版,该版对libpcap 0.5.2进行了升级,并可支持更多的网络类型;2001年1月30日推出了22版;2002年3月28日推出了23版;2003年1月lO日推出了3O版,增加了NPF设备驱动的一些新的特性及优化方案,在wpcap.dll中

24、增加了一些函数等等功能。WinPcap的最新版本是4.1.4。WinPcap的官方主页是www.wpcap.org,可以在其主页上下载这个软件及其源代码,更重要的是,网站上还有很多开发文档,对于利用WinPcap作为工具开发网络安全软件的编程人员有很大帮助。WinPcap提供了四项功能:1)捕获原始数据报,包括共享网络上各主机发送/接收的以及相互之间交换的数据报;2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3)在网络上发送原始的数据报;4)收集网络通信过程中的统计信息。WinPcap的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据包,也就是说,Wi

25、nPcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于QoS调度程序或个人防火墙。目前,WinPcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用WinPcap的用户中只有一小部分是仅使用Windows 95/98/Me,并且微软也已经放弃了对win9x的开发。有个软件叫sniffer pro可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可

26、从中找到邮箱用户名和密码,还有ftp用户名和密码。它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件。还有一个简单的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有ftp用户名和密码,它只能用在HUB网络上。著名软件tcpdump及ids snort都是基于libpcap编写的,此外Nmap扫描器也是基于libpcap来捕获目标主机返回的数据包的。WinPcap提供给用户两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。对于一般的要与unix平台上libpcap兼容的开发来说,使用wpcap.dll是当

27、然的选择。2.5 WinPcap内部结构Winpcap是针对Win32平台上的抓包和网络分析的一个架构,它由内核级的网络组包过滤器(Netgroup Packet Filter,NPF)、用户级的动态链接库Packet.dll和Wpcap.dlI等 3个模块组成7。1) 网络组包过滤器。它是运行于操作系统内核中的驱动程序,它直接与网卡驱动程序进行交互,获取在网络上传输的原始数据包。NPF与操作系统有关,WinPcap开发组针对不同的Windows操作系统提供了不同版本的NPF。在Win95/98/ME系统中,它以VXD文件形式存在,在Windows NT和Windows 2000系统中,它以S

28、YS文件形式存在。该模块提供了抓取数据包以及发送数据包的基本功能,此外还提供了一些高级功能,如数据包过滤系统和检测引擎。2) 低级动态链接库。Pactet.dll用于在Win32平台上为数据包驱动程序提供一个公共的接口。不同的Windows版本在用户态和内核态之间提供互不相同的接口,而Pactet.dll可以屏蔽这些接口区别,提供一个与系统无关的API。基于Pactet.dll开发的数据包截获程序可以运行于不同的Win32平台而不必重新进行编译。Pactet.dll可以执行如获取适配器名称、动态驱动器加载以及获得主机掩码及以太网冲突次数等低级操作。3)高级动态链接库。Wpcap.dll模块与U

29、nix系统下的BSD截获架构提供的Libpcap库完全兼容。它提供了一组功能强大且跨平台的函数,利用这些函数可以不去关心适配器和操作系统的类型。Wpcap.dll含有诸如产生过滤器、定义用户级缓冲以及包注入等高级功能。编程人员既可以使用包含在Pactet.dll中的低级函数直接进入内核级调用,也可以使用由Wpcap.dll提供的高级函数调用,这样功能更强,使用也更为方便。Wpcap.dll的函数调用会自动调用Pactet.dll中的低级函数,并且可能被转换成若干个NPF系统调用。2.6 WinPcap的主要函数库Winpcap函数库主要有如下函数:1)int pcap_findalldevs

30、(pcap_if_t *,char *)用来获得网卡的列表2)void pcap_freealldevs (pcap_if_t *)与int pcap_findalldevs (pcap_if_t *,char *)配套使用,当不需要网卡列表时,用此函数释放空间3)pcap_t *pcap_open_live(const char *, int, int, int, char *)用来得到一个包抓取得描述符4)Int pcap_loop(pcap_t *, int, pcap_handler, u_char *)捕获数据包,不会响应pcap_open_live()中设置的超时时间5)intpc

31、ap_dispatch(pcap_t *, int, pcap_handler, u_char *)捕获数据包。可以不被阻塞6)int pcap_next_ex(pcap_t *, struct pcap_pkthdr *, const u_char *)捕获数据包7)intpcap_compile(pcap_t *, struct bpf_program *, const char *, int,bpf_u_int32)编译一个过滤设备,与pcap _ setfilter () 配合使用8)intpcap_setfilter(pcap_t *, struct bpf_program *)用来

32、联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中3 系统设计3.1 捕获数据的分析与还原对捕获数据的解析,其主要依据是网络协议中定义的各种包的类型和包的格式,下面依次对这些数据的格式与协议进行介绍与分析。3.1.1 802.3标准的数据帧分析与还原根据TCP/IP协议,机器接收到一个以太网数据包时,数据从协议栈中由底向上升,同时去掉各层协议加上的报文首部,每层协议都要检查报文首部的协议表示,以确定数据的上层协议。根据以太网数据链路层的帧格式,网络适配器的驱动程序会自动计算校验和,并取走帧中的前同步码和校验和字段,因此WinPcap 接收的数据包仅仅是其中的

33、帧头和载荷部分,即捕获到的是帧结构中的“目标MAC地址”、“源MAC地址”、“帧类型”、“帧中数据”这四部分。在这种情况下,要实现对数据帧的还原,只需要将捕获的数据帧的前12个字节分别转换为十六进制数据,就可以清楚地看到MAC地址,并通过对比本机的MAC地址,还可以初步判断出该数据帧是本机发送的或是接收到的。3.1.2 IP报文的分析与还原首先来看下IP数据报格式8,如图3-1所示:图3-1 IP数据报格式版本:4位,标识IP版本号。目前有IPv4、IPv6。我们目前所用的IP协议基本都是IPv4版本。首部长度:4位,度指的是首部占32bit字的数目,包括任何选项。由图3-1可知首部所占字节数

34、为(4+4+8+16+16+3+13+8+8+16+32+32+0)160bit,正好是32bit的5倍,所以首部长度最小为5。如果选项字段有其它数据,则这个值会大于5。由上面也可知IP首部最小长度为20字节,最大长度为(2的4次方-1)*32/860字节。服务类型:8位,其中:优先权:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)-7(网络控制)。TOS:4位,分别表示最小延时、最大吞吐量、最高可靠性、最小费用。如果4位TOS子字段均为0,那么就意味着是一般服务。未使用:1位,必须置0。总长度:16位,总长度指首部和数据之和的长度,以字节为单位。利用首部长度字段和总长

35、度字段,就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节。标识:16位,唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。在分片和重组技术中将会用到。标志:3位,但目前只有2位有意义。标志

36、字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报;MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为DF(Dont Fragment),意思是“不能分片”。只有当DF=0时才允许分片,具体定义如下:1) 保留位: 1位 ;2) DF字段:1位,取值:0(允许数据报分段)、1(数据报不能分段);3) MF字段:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)。片偏移:13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置,也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位

37、,这就是说,每个分片的长度一定是8字节(64位)的整数倍。生存时间:8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。一般可以理解为经过路由器的最大数目。协议:8位。协议字段指出此数据报携带的数据是使用何种协议(上层协议),以便使目的主机的IP层知道应

38、将数据部分上交给哪个处理过程。协议可包括TCP、UDP、TELNET等,1=ICMP,6=TCP,17=UDP。首部校验和:16位,首部检验和字段是根据IP首部计算的检验和码,它不对首部后面的数据进行计算。ICMP,UDP,TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。为了计算一份数据报的IP检验和,首先把检验和字段置为0,然后对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过

39、程中没有发生任何差错,那么接收方计算的结果应该为全1,如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报,但是不生成差错报文,由上层去发现丢失的数据报并进行重传。源IP地址:32位,发送IP的主机地址。目的IP地址:32位,数据发往的IP主机地址。3.1.3 UDP数据包的封装UDP是一个简单的面向数据报的运输层协议8,进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP数据报格式有首部和数据两个部分,如图3-2:图3-2 UDP数据报格式首部很简单,共8字节,如图3-3:图3-3 UDP首部包括:源端口(Source Port):2字节,源端口号。目

40、的端口(Destination Port ):2字节,目的端口号。长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。尽管UDP校验和的基本计算方法与IP首部校验和的计算方法类似(16bit字的二进制反码和),但是它们之间存在不同的地方,UDP数据报长度可以为奇数字节,但是校验和的算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了校验和的计算(也就是说,可能增加的填充字节不被传送)。UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算校

41、验和而设置的。伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP有没有接受地址不是本主机的数据报,以及IP有没有把应传给另一高层的数据报传送给UDP)。UDP数据报中的伪首部格式如图3-4所示:图3-4 UDP数据报的伪首部格式3.1.4 TCP数据包的封装TCP数据被封装在一个IP数据报中8,如图3-5所示:图3-5 TCP数据在IP数据报中的封装图3-6显示TCP首部的数据格式。如果不计任选字段,它通常是20个字节。图3-6 TCP包首部3.1.5 ICMP数据包的封装IP协议提供的是面向无连接的服务,不存在关于网络连接的建立和维护过程,也不包括流量

42、控制与差错控制功能,但需要对网络的状态有一些了解,因此在网际层提供了因特网控制消息协议(Internet control message protocol,简称ICMP)来检测网络,包括路由、拥塞、服务质量等问题。在网络中,ICMP报文将作为IP层数据报的数据,封装在IP数据报中进行传输,如图3-7所示,但ICMP并不是高层协议,而仍被视为网络层协议。图3-7 ICMP数据在IP数据报中的封装ICMP报文的类型很多,且各自又有各自的代码,因此,ICMP并没有一个统一的报文格式,不同的ICMP类别分别有不同的报文字段。ICMP报文只是在前4个字节有统一的格式,共有类型、代码和校验和3个字段。如图

43、3-8所示。图3-8 ICMP报文的格式其中类型字段表示ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同情况;校验和字段用来检验整个ICMP报文,接着的4个字节的内容与ICMP的类型有关,再后面是数据字段,其长度取决于ICMP的类型。4 实现与分析4.1 WinPcap环境配置4.1.1 WinPcap下载从http:/www.winpcap.org/devel.htm下载winpcap的开发库从http:/www.winpcap.org/install/default.htm下载winpcap驱动4.1.2 WinPcap配置1) 安装WinPcap驱动,安装完成后重启电脑。2

44、) 解压下载的WinPcap开发包,将Include文件夹里的文件全部复制到VC目录下的Include文件夹中,同理复制开发包中Lib文件夹中的文件到VC目录下的Lib文件夹中。3) 把WinPcap的静态链接库wsock32.lib添加到VC+中,步骤如下:进入VC+中,选取“工程”按钮,选取“设置”,点击“LINK”标签,在“对象/库模块”下添加wsock32.lib。至此WinPcap的环境配置完成。4.2 程序的实现4.2.1 网络数据捕获的基本流程一个完整的基于WinPcap的网络数据捕获程序应由两部分组成9:内核部分和用户分析部分。其中内核部分负责从网络中捕获和过滤数据,这可以通过

45、调用WinPcap丰富的接口函数实现。用户分析部分主要负责界面、数据转化与处理、格式化、协议分析等。实现流程如图4-1所示。图4-1 基于WinPcap的网络数据捕获基本流程简单地说来就是打开网卡,抓包,分析包。4.2.2获取网卡信息#include pcap.h void main() pcap_if_t *alldevs; pcap_if_t *d; int i=0; char errbufPCAP_ERRBUF_SIZE; /*未获取网卡,返回网卡列表,alldevs指向表头*/ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &all

46、devs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf); exit(1); /*打印列表*/ for(d=alldevs;d;d=d-next) printf(%d. %s, +i, d-name); if (d-description) printf( (%s)n, d-description); else printf( (No description available)n); if(i=0) printf(nNo interfaces found! Make sure WinPcap is installed.n); return; /*不需要网卡列表,释放空间*/ pcap_freealldevs(alldevs);4.2.3捕获数据包/*打开设备*/if(adhandle=pcap_open(d-name,/ 设备名65536,/保证能捕获到数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS, / 混杂模式1000, / 读取超时时间NULL,/ 远程机器验证errbuf/ 错误缓冲池)=NULL)/* 开始捕获 */pcap_loop(adhandle, 0, packet_handler, NULL);return 0;void pac

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1