网络抓包与协议分析软件的设计与开发_第1页
网络抓包与协议分析软件的设计与开发_第2页
网络抓包与协议分析软件的设计与开发_第3页
网络抓包与协议分析软件的设计与开发_第4页
网络抓包与协议分析软件的设计与开发_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、:任务书、开题报告、外文译文、译文原文(复印件)。.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸, 要求部分用尺规绘制, 部分用计算机绘制, 所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用 A4单面打印,论文 50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订 TOC o 1-5 h z HYPERLINK l b

4、ookmark10 o Current Document 1绪论1. HYPERLINK l bookmark12 o Current Document 课题来源1. HYPERLINK l bookmark14 o Current Document 当今网络数据安全现状 1. HYPERLINK l bookmark16 o Current Document 网络数据安全的技术研究 2. HYPERLINK l bookmark18 o Current Document 2主要技术介绍 3. HYPERLINK l bookmark20 o Current Document 数据包的介绍3.

5、 HYPERLINK l bookmark22 o Current Document 网络数据包捕获原理4. HYPERLINK l bookmark24 o Current Document 网络数据包的捕获方法 5.原始套接字 5.LibPcap5.WinPcap5.JPcap6.WinPcap 研究.6.WinPcap 内部结构7.WinPcap的主要函数库.8. HYPERLINK l bookmark26 o Current Document 3系统设计.10. HYPERLINK l bookmark28 o Current Document 捕获数据的分析与还原1.0802.3

6、标准的数据帧分析与还原 1.0IP报文的分析与还原1.0UDP数据包的封装 1.2TCP数据包的封装 1.4ICMP数据包的封装.15 HYPERLINK l bookmark30 o Current Document 4实现与分析16WinPcap 环境酉己置 16WinPcap 下载1.6WinPcap 配置1.6 HYPERLINK l bookmark32 o Current Document 程序的实现1.6网络数据捕获的基本流程 .16获取网卡信息1.7捕获数据包 18分析数据包20 HYPERLINK l bookmark34 o Current Document 程序编译中出现

7、的问题 23 HYPERLINK l bookmark36 o Current Document 问题的解决23 HYPERLINK l bookmark38 o Current Document 程序功能23程序主界面23工具栏24 HYPERLINK l bookmark40 o Current Document 程序运行结果 26 HYPERLINK l bookmark44 o Current Document 5总结和展望28. HYPERLINK l bookmark46 o Current Document 本文主要工作28展望28. HYPERLINK l bookmark48

8、 o Current Document 致谢语29.参考文献30.网络抓包与协议分析软件的设计与开发摘要:网络数据包捕获是进行网络分析的基础,通过对 Windows操作系统平台下网络数据包捕获 模型的论述,重点对基于NDIS的优秀包捕获开发包 WinPcap的结构和功能的进行了详细的介绍和分析,实现了如何在 VC+ 6.0环境下借助 WinPcap提供的各个接口函数对网卡进行编程进而对网 络数据包进行捕获和分析的方法,突出叙述了数据包捕获在网络分析中的应用。关键字:数据包捕获,数据包,WinPcapDesign and development a packet captureand proto

9、col analysis softwareAbstract : Network packet capture is the precondition for network analysis , through the analysis of the models of network 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 networ

10、k adapter and how to capture and analyze the network data packets through WinPcap are realized under the environment of VC 6.0+, theapplications of network data capture for network analysis is narrated in detail.Key words: packet capture data packet WinPcap1绪论课题来源随着网络技术的飞速发展和网络时代的到来, 互联网的影响已经渗透到国民经济

11、的 各个领域和人民生活的各个方面,全社会对网络的依赖程度越来越大, 整个世界通过网 络正在迅速地融为一体,但由于计算机网络具有联结形式多样性、 终端分布不均匀性和 网络的开放性、互联性等特征,致使网络易受黑客、恶意软件和其他不轨的攻击。广义 来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术 和理论都是网络安全所要研究的领域。 网络安全涉及的内容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。技术方面主要侧重于防范外部非法用户 的攻击,管理方面则侧重于内部人为因素的管理。如何更有效地保护重要的信息数据、 提高计算机网络系统的安全性已经成为所有计算机网

12、络应用必须考虑和必须解决的一 个重要问题。可以这样来定义网络数据安全:所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时 系统能够连续、可靠地运行,网络服务不被中断。但在现实中,绝对安全的网络是没有 的川。据IT界企业团体ITAA的调查显示,美国90%的IT企业对黑客攻击准备不足。目前美国75% 85%的网站都抵挡不住黑客的攻击,约有 75%的企业网上信息失 窃,其中25%的企业损失在25万美元以上.因此了解网络面临的各种威胁,防范和消 除这些威胁,实现真正的网络安全已经成了网络发展中最重要的事情。当今网络数据安全现状计算机

13、网络的核心是网络协议,所以研究协议与网络安全的关系就是至关重要的。 现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好 的、通信的双方充分信任的基础。在通常的网络环境之下,用户的信息包括口令都是以 明文的方式在网上传输的,只要将网络接口设置成监听模式, 便可以源源不断地将网上 传输的信息截获,因此进行网络监听从而获得用户信息并不是一件困难的事情。例如目前使用最广泛的TCP/IP协议就存在很多安全缺陷,而 FTR PO济口 Telnet协议在本质 上也是不安全的,从而很多网络的攻击就是针对这些不安全协议进行的。1994年一个最大的嗅探器(Sniffer ,网络数据监听器)

14、攻击被发现,这次攻击被人们普遍认为是记 载中最为严重的一次,攻击者处于 Rahul.Net,使许多以FTR Telnet或远程登陆的主 机系统都受到了危害。在这件事故中,嗅探器只运行了18个小时。在这段时间里,有几百台主机被泄密。受攻击者包括268个站点,如麻省理工学院、美国海军和空军、SUN 微系统公司、旧M、NASA CERFNE刷加拿大、以色列、荷兰、比利时的一些大学的机 器。协议的安全验证方式也是有弱点的,就是很容易受到“中间服务器”方式的攻击。 所谓“中间服务器”攻击方式,就是“中间服务器”冒充真正的服务器接收用户传给服 务器的数据,然后再冒充用户把数据传给真正的服务器。 服务器和用

15、户之间的数据传送 被“中间服务器”转发并做了手脚之后,就会出现很严重的问题。例如:冒充域名服务 器的攻击,也就是DNSK骗。它是攻击者冒充域名服务器的一种欺骗行为,它主要用于 向主机提供错误DNSW息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网 址为 WWW.XXX.COM实际上登录的确实IP地址YYY.YY.YY.YYh的 HYPERLINK http:/WWW.XXX.COM WWW.XXX.COM 户上网就只能看到攻击者的主页, 而不是用户想要取得的网站的主页了,这个网址是攻击者用以窃取网上银行登录证书以及帐号信息的假冒网址。据统计,目前网络攻击手段有数千种之多;美

16、国商业杂志信息周刊公布的一项调查报告称,黑客攻击和病毒等 安全问题在2000年就造成了上万亿美元的经济损失,在全球范围内每数秒钟就发生一 起针对网络的不同形式的攻击事件。网络数据安全的技术研究为了保证网络的安全,防止网络攻击,除了对信息采用加密技术之外,还有就是与 网络协议相关的网络安全手段,例如防火墙技术、入侵监测技术、安全扫描技术、协议 分析技术和数据包生成技术等。 这些技术中,数据包的捕获和分析是最首要的手段,它是诸多网络安全技术实现的基础。2主要技术介绍数据包的介绍“包” (Packet)是TCP/IP协议通信传输中的数据单元,一般也称“数据包”。有人说,局域网中传输的不是“帧 (Fr

17、ame)吗?没错,但是 TCP/IP协议是工作在 OSI模型第三层(网络层),第四层(传输层)上的,而帧是工作在第二层(数据链路 层)。上一层内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里 的。用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧, 且一个帧中只有一个数据包。包”听起来非常抽象,那么是不是不可见的呢?通过一定 技术手段

18、,是可以感知到数据包的存在的。比如在能上网的情况下,把鼠标移动到任务 栏右下角的网卡图标上单击就会弹出一个窗口,如图2-1 ,就可以看到“发送:XX包,收到:xx包”的提示。图2-1 网络连接状态我们上网打开网页,这个简单的动作,就是我们先发送数据包给网站,网站接收到 了之后,根据发送的数据包的IP地址,返回网页的数据包,也就是说,网页的浏览, 实际上就是数据包的交换。如果能把数据包捕获,通过分析这些数据,我们就可以知道 网络中这些数据包传输的信息。那么如何捕获这些数据包呢?网络数据包捕获原理由于目前用的最多的网络形式是以太网 ,在以太网上,数据是以被称为帧的数据 结构为单位进行交换的,而帧(

19、数据包)是用被称为带碰撞检测的载波侦听多址访问即 CSMA/CD (carrier sense multiple access wim collision detection)勺方式发送的,在这种方 法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已。正是这种基于CSMS/CD的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能,即通过对网络接口的设置可以使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时 分析这些数据的内容,进而分析网络当前状态和整体布局。 这里,通过设置硬路由器的 监听端口来

20、捕获数据包的方式不再本文讨论范围内。从广义的角度上看,一个包捕获机制包含三个主要部分: 首先是最底层针对特定操 作系统的包捕获机制,然后是最高层针对用户程序的接口, 第三部分是包过滤机制。不 同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、 IP层、传输层、最后到达应 用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影 响操作系统对数据包的网络栈处理。 对用户程序而言,包捕获机制提供了一个统一的接 口,使用户程序只需

21、要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明, 使用户程序有比较好的可移植性。 包过滤机制是 对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。网络数据包的捕获方法原始套接字套接字网(Sock)是网络应用编程接口。应用程序可以使用它进行网络通信而不需 要知道底层发生的细节。有时候需要自己生成一些定制的数据包或者功能并希望绕开套 接字的功能,原始套接字(Raw Socket)就满足了这样的要求。原始套接字能够生成自 己的数据报文,包括报送和数据报本身的内容。通过原始套接字,可以更加自如地控制Windows下的多种协

22、议,而且能够对网络底层的传输机制进行控制。原始套接字可以用来发送和接收IP层以上的原始数据包,比如ICMP,TCP,UDP,而 且能够对网络底层的传输机制进行控制。原始套接字的作用主要有三个方面:1)接收发向本机的ICMP,IGMP协议包,或者发送这些协议包;2)接收发向本机的IP包;3)发送自定义的IP包。LibPcapLibPcap4是一个广泛应用的系统抓包库。LibPcap是一种与系统无关,采用分组捕 获机制的分组捕获函数库,用于访问数据链路层,它在不同的平台上采用统一的编程接 ,使用LibPcap编写的程序可以自由地跨平台使用。同时LibPcap是一个独立于系统接口的用户级的抓包库,它

23、为底层网络监听提供了可移植框架。它的应用包括网络统计 集合,安全监听,网络调试等。WinPcapWinPcap是LibPcap的Windows版本,它是一个基于 Win32的捕获数据包和网络 分析的体系结构,它包括一个内核级的包过滤器,一个底层的动态链接库(Packet.dll), 一个高层并且与系统无关的库(WPcap.dll,基于LibPcap0.6.2版本)。WinPcap是集成 于Windows95,98, ME,NT,2000和X限作系统的设备驱动程序,它可以从网卡捕获或者 发送原始数据,同时能够过滤并且仓储数据包。开发 WinPcap这个项目的目的在于为 Win32应用程序提供访问

24、网络底层的能力。它提供以下四项功能:1)捕获原始数据报,包括共享网络上各主机发送/接收的以及相互之间交换的数据报;2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3)在网络上发送原始的数据报;4)收集网络通信过程中的统计信息。JPcapJPcap6是一个能够捕获,发送网络数据包的Java类库包。这个包用到了 LibPcap和原始套接字 API o 目前 JPcapft FreeBSD 3.x, Linux RedHat 6.1, Solaris ft Microsoft Windows 2000/XP 系统上已经做过测试,并且支持 Ethernet, IPv4, IPv

25、6, ARP/RARP , TCP, UDP, ICMPv4协议。JPcap是一个Java类集合,它为网络数据包的捕获提供接 口和系统支持。最初版本是 2000年6月发布的JPcap).01版,此后几经修改,到现在 最新的JPcap0.7版。WinPcap研究WinPcap是windows平台下一个免费、公共的网络访问系统,是为 Linux下的 Libpcap移植到 Windows平台下实现数据包捕获而设计的函数库, 在设计 WinPcap时参 照了 Libpcap,使用方法也与Libpcap相似,基于Libpcap的程序可以很容易的移植到 Windows平台下。这个数据包捕获架构是由加州大学

26、和Lawrence Berkeley实验室及其投稿者联合开发的,他们在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.。版,增加了 NPF设备驱动的一些新的特性及优化方案,在 wpcap.dll 中增加了一些函数等等功能。WinPcap的最新版本是4.1.4 。WinPcap的官方

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

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

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

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

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

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

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

34、*, int, pcap_handler, u_char *)捕获数据包。可以不被阻塞int pcap_next_ex(pcap_t *, struct pcap_pkthdr *, const u_char *)捕获数据包int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, bpf_u_int32) 编译一个过滤设备,与pcap _ setfilter ()配合使用int pcap_setfilter(pcap_t *, struct bpf_program *)用来联系一个在内核驱动上过滤的过滤器,这时所有网

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

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

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

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

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

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

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

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

43、位皿F检查和数据 如果有)图3-3 UDP首部包括:源端口 ( Source Port ) : 2字节,源端口号。目的端口(Destination Port ) : 2字节,目的端口号。长度(Length) : 2字节,UDFffl户数据报的总长度,以字节为单位。检验和(Checksum : 2字节,用于校验UD嗷据报的数字段和包含UDPt据报首部的 “伪首部”。尽管UD市验和的基本计算方法与IP首部校验和的计算方法类似(16bit 字的二进制反码和),但是它们之间存在不同的地方,UD嗷据报长度可以为奇数字节, 但是校验和的算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节 0

44、, 这只是为了校验和的计算(也就是说,可能增加的填充字节不被传送)。UD嗷据报和TCPS都包含一个12字节长的伪首部,它是为了计算校验和而设置 的。伪首部包含IP首部一些字段,其目的是让 UDP两次检查数据是否已经正确到达目 的地(例如,IP有没有接受地址不是本主机的数据报,以及IP有没有把应传给另一高层的数据报传送给UDP 。 UD嘤据报中的伪首部格式如图3-4所示:133132位源工F地址加位目的工E地址08位阴浪16位皿F长度16位源端口号16位目的端口号16位UDF长度15位ITOF检查和数据15 16图3-4 UDP数据报的伪首部格式UDF首都J 皿p伪首部3.1.4 TCP数据包的

45、封装TCP&据被封装在一个IP数据报中网,如图3-5所示:W工F数据报TCP报文段1F首部TCF首部TCF数据20字节出字节图3-5 TCP数据在IP数据报中的封装图3-6显示TCP首部的数据格式。如果不计任选字段,它通常是 20个字节16位源端口号16位目的端口号3范序号32位确认序号4嘘部球留6位】梁:川I16位窗口大小18位检验和16位紧急指针选项数据口岭 1631图3-6 TCP包首部143.1.5 ICMP数据包的封装IP协议提供的是面向无连接的服务,不存在关于网络连接的建立和维护过程,也 不包括流量控制与差错控制功能,但需要对网络的状态有一些了解,因此在网际层提供 了因特网控制消息

46、协议 (Internet control message protocoJ简称ICMP)来检测网络,包 括路由、拥塞、服务质量等问题。在网络中,ICMP文将作为IP层数据报的数据,封 装在IP数据报中进行传输,如图3-7所示,但ICMP并不是高层协议,而仍被视为网络 层协议。长工WF数据报MIF报头工CMF报头工CMF信息K 翻据报图3-7 ICMP数据在IP数据报中的封装ICMP报文的类型很多,且各自又有各自的代码,因此,ICMP并没有一个统一的 报文格式,不同的ICMP类别分别有不同的报文字段。ICMP报文只是在前4个字节有 统一的格式,共有类型、代码和校验和 3个字段。如图3-8所示。类

47、型(8bits)代舄(8bi ;s )n校验和(16bits:ICMF数据部分,不同类型和代码有不同内容图3-8 ICMP报文的格式其中类型字段表示ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同 情况;校验和字段用来检验整个ICMP报文,接着的4个字节的内容与ICMP的类型有关, 再后面是数据字段,其长度取决于ICMP的类型。154实现与分析WinPcap环境配置WinPcap 下载从 HYPERLINK /devel.htm /devel.htm 下载 winpcap 的开发库从 HYPERLINK /install/default.htm /install/default.

48、htm 下载 winpcap 马区动WinPcap 配置1)安装WinPcap驱动,安装完成后重启电脑。2)解压下载的 WinPcap开发包,将Include文件夹里的文件全部复制到 VC目录下 的Include文件夹中,同理复制开发包中 Lib文件夹中的文件到 VC目录下的Lib文件 夹中。3)把 WinPcap的静态链接库 wsock32.lib添加到VC+中,步骤如下:进入 VC+ 中,选取“工程”按钮,选取“设置”,点击“ LINK”标签,在“对象/库模块”下添 力口 wsock32.lib。至止匕WinPcap的环境配置完成。程序的实现网络数据捕获的基本流程一个完整的基于 WinPc

49、ap的网络数据捕获程序应由两部分组成9:内核部分和用户 分析部分。其中内核部分负责从网络中捕获和过滤数据,这可以通过调用WinPcap丰富的接口函数实现。用户分析部分主要负责界面、数据转化与处理、格式化、协议分析 等。实现流程如图4-1所示。16图4-1基于WinPcap的网络数据捕获基本流程 简单地说来就是打开网卡,抓包,分析包。获取网卡信息#include pcap.hvoid main()(pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbufPCAP_ERRBUF_SIZE;/*未获取网卡,返回网卡列表,alldevs指向表头*/if (

50、pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) = -1)(fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exit(1);17/*打印列表*/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

51、(nNo interfaces found! Make sure WinPcap is installed.n);return;/*不需要网卡列表,释放空间*/pcap_freealldevs(alldevs);捕获数据包/*打开设备*/if(adhandle=pcap_open (d-name,/设备名65536保证能捕获到数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS, / 混杂模式1000,/读取超时时间NULL,/远程机器验证errbuf/错误缓冲池)= NULL)/*开始捕获*/pcap_l00P(adhandle, 0, packet_hand

52、ler, NULL);18return 0;void packet_handler(u_char *param, const struct pcap_pkthdr *header, constu_char*pkt_data)struct tm *ltime;char timestr16;ip_header *ih;udp_header *uh;tcp_header *th;icmp_header *ich;u_int ip_len;u_short totallen;myvector.push_back(pkt_data) / 把收到的包放到一个向量 myvector 里面 ltime=loca

53、ltime(&header-ts.tv_sec);strftime( timestr, sizeof timestr, %H:%M:%S, ltime);ih = (ip_header *) (pkt_data +14);从包中解开 IP 头并将其赋给 ihip_len = (ih-ver_ihl & 0 xf) * 4;totallen = ntohs(ih-tlen);totallen += 18;mycount.push_back(totallen)/将整个包的大小值放到一个向量 mycount里面PACKET *pkt = new PACKET;strcpy(pkt-timestr,

54、timestr);memcpy(&(pkt-IpHead), ih, sizeof(ip_header);if(int(ih-proto) = 17) /如果是UDP包就从解开UDP头并将其赋给uhuh = (udp_header *) (u_char*)ih + ip_len);memcpy(&(pkt-UdpHead), uh, sizeof(udp_header);)if(int(ih-proto) = 6)/如果是TCP包就从解开TCP头并将其赋给th19th = (tcp_header *)(u_char*)ih + ip_len);memcpy(&(pkt-TcpHead), th

55、, sizeof(tcp_header);)if(int(ih-proto) = 1)/如果是ICMP包就从解开ICMP头并将其赋给ich(ich = (icmp_header *)(u_char*)ih + ip_len);memcpy(&(pkt-IcmpHead), ich, sizeof(icmp_headei);)分析数据包这里列举UDP包的分析实现代码:char ip_len8=;char szLer8=;char identifier16=;char offset12=;char live8=;char proto8=;char checksun16=;char srcIP16=

56、;char desIF16=;char srcport16=;char despor(16=;char dramlen16=;char crc16=;if(pDoc-GetCount() != -1) IP 头长,8bits/ 总长,8bits/ 标识,16bits/分段偏移,12bits/生命周期,8bits/ 协议,8bits首部检验和,16bits源 IP, 16bits/ 目的 IP, 16bits UDP 源端口,16bits UDP 目的端口,16bits UDP 长度,16bits UDP 检验和,16bits int mycon = pDoc-GetCount();/读取存放在

57、向量中的包头的信息,解开包的IP头pDC-TextOut(0, 0, IP 头)20pDC-TextOut(0, height,版本号:);pDC-TextOut(7* width, height, 4);pDC-TextOut(0, 2* height, IP 头长:);sprintf(ip_len, %d, (mypacketmycon.IpHead.ver_ihl & 0 xf) * 4);pDC-TextOut(7*width, 2*height, ip_len);pDC-TextOut(0, 3*height,服务类型:);pDC-TextOut(7*width, 3*height,

58、 mypacketmycon.IpHead.tos);pDC-TextOut(0, 4*height,总长:);sprintf(szLen, %d, ntohs(mypacketmycon.IpHead.tlen)+18);pDC-TextOut(7*width, 4*height, szLen);pDC-TextOut(0, 5*height,标识:);sprintf(identifier, %d, ntohs(mypacketmycon.IpHead.identification);pDC-TextOut(7*width, 5*height, identifier);pDC-TextOut

59、(0, 6*height,分段偏移:);sprintf(offset, %d, (char)(ntohs(mypacketmycon.IpHead.flags_fo) & 0 x1fff);pDC-TextOut(7*width, 6*height, offset);pDC-TextOut(0, 7*height,生命期(S):);sprintf(live, %d, int(mypacketmycon.IpHead.ttl);pDC-TextOut(7*width, 7*height, live);pDC-TextOut(0, 8*height,协议:);sprintf(proto, %d,

60、int(mypacketmycon.IpHto);pDC-TextOut(7*width, 8*height, proto);if(int(mypacketmycon.IpHto) = 17)pDC-TextOut(8*width, 8*height, (UDP);pDC-TextOut(0, 9*height,头校验和:);sprintf(checksum, %d, ntohs(mypacketmycon.IpHead.crc);pDC-TextOut(7*width, 9*height, checksum);pDC-TextOut(0, 10*height,源地址:);sprintf(sr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论