网络抓包和协议分析软件的设计和开发网络陈金锋样本.doc_第1页
网络抓包和协议分析软件的设计和开发网络陈金锋样本.doc_第2页
网络抓包和协议分析软件的设计和开发网络陈金锋样本.doc_第3页
网络抓包和协议分析软件的设计和开发网络陈金锋样本.doc_第4页
网络抓包和协议分析软件的设计和开发网络陈金锋样本.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

网络抓包和协议分析软件的设计和开发网络陈金锋样本 网络抓包和协议分析软件的设计和开发网络陈金锋毕业设计(论文)题目:网络抓包与协议分析软件的设计与开发学生:陈金锋指导老师:邹复民讲师系别:计算机与信息科学系本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 专业:网络工程班级:网络10601班学号:66月福建工程学院本科毕业设计(论文)作者承诺保证书本人郑重承诺:本篇毕业设计(论文)的内容真实、可靠。 如果存在弄虚作假、抄袭的情况,本人愿承担全部责任。 学生签名:年月日福建工程学院本科毕业设计(论文)指导教师承诺保证书本人郑重承诺:我已按有关规定对本篇毕业设计(论文)的选题与内容进行了指导和审核,该同学的毕业设计(论文)中未发现弄虚作假、抄袭的现本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 象,本人愿承担指导教师的相关责任。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 网络抓包与协议分析软件的设计与开发摘要:网络数据包捕获是进行网络分析的基础,通过对Windows操作系统平台下网络数据包捕获模型的论述,重点对基于S NDIS的优秀包捕获开发包WinPcap的结构和功能的进行了详细的介绍和分在析,实现了如何在VC+助环境下借助WinPcap提提供的各个接口函数对网卡进行编程进而对网络数据包进行捕获和分析的方法,突出叙述了数据包捕获在网络分析中的应用。 关键字:,数据包捕获,数据包,WinPcap本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 Design anddevelopment apacket captureand protocolanalysis softwareAbstract:Network packet capture isthe preconditionfor workanalysis,through theanalysis ofthe modelsof workdata packetcapture inWindows,the structureand functionof WinPcapbased onNDIS isanalyzed andintroduced indetail,and howto programon the work adapterand howto captureand analyzetheworkdata packetsthrough WinPcapare realizedunder theenvironment ofVC+,the applicationsof workdata capturefor workanalysis isnarrated indetail.Key words:packetcapture,data packet,WinPcap本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 1绪论课题随着网络技术的飞速发展和网络时代的到来,互联网的影响已经渗透到国民经济的各个领域和人民生活的各个方面,全社会对网络的依赖程度越来越大,整个世界通过网络正在迅速地融为一体,但由于计算机网络具有联结形式多样性、终端分布不均匀性和网络的开放性、互联性等特征,致使网络易受黑客、恶意软件和其它不轨的攻击。 广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全所要研究的领域。 网络安全涉及的内容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。 技术方面主要侧重于防范外部非法用户的攻击,管理方面则侧重于内部人为因素的管理。 如何更有效地保护重要的信息数据、提高计算机网络系统的安全性已经成为所有计算机网络应用必须考虑和必须解决的一个重要问题。 能够这样来定义网络数据安全:所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时系统能够连续、可靠地运行,网络服务不被中断。 但在现实中,绝对安全的网络是没有的1。 据T IT界企业团体A ITAA的调查显示,美国90的T IT企业对黑客攻击准备不足。 当前美国75一85的网站都抵挡不住黑客的攻击,约有75的企业网上信息失窃,其中25的企业损失在525万美元以上因此了解网络面临的各种威胁,防范和消除这些威胁,实现真正的网络安全已经成了网络发展中最重要的事情。 当今网络数据安全现状计算机网络的核心是网络协议,所以研究协议与网络安全的关系就是至关重要的。 现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好的、通信的双方充分信任的基础。 在通常的网络环境之下,用户的信息包括口令都是以明文的方式在网上传输的,只要将网络接口设置成监听模式,便能够源源不断本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 地将网上传输的信息截获,因此进行网络监听从而获得用户信息并不是一件困难的事情。 例如当前使用最广泛的P TCP/IP协议就存在很多安全缺陷,而FTP、P POP和和Tel协议在本质上也是不安全的,从而很多网络的攻击就是针对这些不安全协议进行的。 41994年一个最大的嗅探器(Sniffer,网络数据监听器)攻击被发现,这次攻击被人们普遍认为是记载中最为严重的一次,使许多以FTP、t Tel或远程登陆的主机系统都受到了危害。 在这件事故中,嗅探器只运行了818个小时。 在这段时间里,有几百台主机被泄密。 受攻击者包括8268个站点,如麻省理工学院、美国海军和空军、SUN微系统公司、IBM、N NASA、T CERFNET和加拿大、以色列、荷兰、比利时的一些大学的机器。 协议的安全验证方式也是有弱点的,就是很容易受到“中间服务器”方式的攻击。 所谓“中间服务器”攻击方式,就是“中间服务器”冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。 服务器和用户之间的数据传送被“中间服务器”转发并做了手脚之后,就会出现很严重的问题。 例如:冒充域名服务器的攻击,也就是S DNS欺骗。 它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误S DNS信息,当用户尝试浏览网页,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这个网址是攻击者用以窃取网上银行登录证书以及帐号信息的假冒网址。 据统计,当前网络攻击手段有数千种之多;美国商业杂志信息周刊公布的一项调查报告称,黑客攻击和病毒等安全问题在就造成了上万亿美元的经济损失,在全球范围内每数秒钟就发生一起针对网络的不同形式的攻击事件。 网络数据安全的技术研究为了保证网络的安全,防止网络攻击,除了对信息采用加密技术之外,还有就是与网络协议相关的网络安全手段,例如防火墙技术、入侵监测技术、安全扫描技术、协议分析技术和数据包生成技术等。 这些技术中,数据包的捕获和分析是最首要的手段,它是诸多网络安全技术实现的基础。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 2主要技术介绍数据包的介绍“包”(Packet)是P TCP/IP协议通信传输中的数据单元,一般也称“数据包”。 有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是P TCP/IP协议是工作在I OSI模型第三层(网络层),第四层(传输层)上的,而帧是工作在第二层(数据链路层)。 上一层内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。 用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。 必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。 这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。 包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是能够感知到数据包的存在的。 比如在能上网的情况下,把鼠标移动到任务栏右下角的网卡图标上单击就会弹出一个窗口,如图22-11,就能够看到“发送:包,收到:包”的提示。 图图22-11网络连接状态本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 我们上网打开网页,这个简单的动作,就是我们先发送数据包给网站,网站接收到了之后,根据发送的数据包的P IP地址,返回网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。 如果能把数据包捕获,通过分析这些数据,我们就能够知道网络中这些数据包传输的信息。 那么如何捕获这些数据包呢?网络数据包捕获原理由于当前用的最多的网络形式是以太网2,在以太网上,数据是以被称为帧的数据结构为单位进行交换的,而帧(数据包)是用被称为带碰撞检测的载波侦听多址访即问即CSMA/CD(carrier sensemultiple aesswim collisiondctection)的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检于测到经过的数据不是发往自身的,简单忽略过去而已。 正是这种基于CSMS/CD的广播机制,这就给连接在网络上的计算机捕获于其它主机的数据带来了可能,即通过对网络接口的设置能够使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时分析这些数据的内容,进而分析网络当前状态和整体布局。 这里,通过设置硬路由器的监听端口来捕获数据包的方式不再本文讨论范围内。 从广义的角度上看,一个包捕获机制包含三个主要部分:首先是最底层针对特定操作系统的包捕获机制,然后是最高层针对用户程序的接口,第三部分是包过滤机制。 不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。 数、据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。 而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。 值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。 对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。 这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。 包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 网络数据包的捕获方法原始套接字套接字3(Sock)是网络应用编程接口。 应用程序能够使用它进行网络通信而不需要知道底层发生的细节。 有时候需要自己生成一些定制的数据包或者功能并希望绕开套接字的功能,原始套接字(Raw Socket)就满足了这样的要求。 原始套接字能够生成自己的数据报文,包括报送和数据报本身的内容。 通过原始套接字,能够更加自如制地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。 收原始套接字能够用来发送和接收IP层以上的原始数据包,如比如ICMP,TCP,UDP,而且能够对网络底层的传输机制进行控制。 原始套接字的作用主要有三个方面:11的)接收发向本机的ICMP,IGMP协议包,或者发送这些协议包;22的)接收发向本机的IP包;33的)发送自定义的IP包。 LibPcap LibPcap4是一个广泛应用的系统抓包库。 LibPcap是一种与系统无关,采用分组捕获机制的分组捕获函数库,用于访问数据链路层,它在不同的平台上采用统一的编程接口,用使用LibPcap编写的程序能够自由地跨平台使用。 同时LibPcap是一个独立于系统接口的用户级的抓包库,它为底层网络监听提供了可移植框架。 它的应用包括网络统计集合,安全监听,网络调试等。 WinPcap WinPcap5是是LibPcap的Windows版本,于它是一个基于Win32的捕获数据包和网络分析的体系结构,它包括一个内核级的包过滤器,一个底层的动态链接库(),一个高层并且与系统无关的库(,)。 WinPcap是集成于Windows95,98,ME,NT,和和XP操作系统的设备驱动程序,它能够从网卡捕获或者发送原始数据,同时能够过滤并且发仓储数据包。 开发WinPcap这个项目的目的在于为2Win32应用程序提供访问网络底层的能力。 它提供以下四项功能:11)捕获原始数据报,包括共享网络上各主机发送/接收的以及相互之间交换的数本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 据报;22);在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;33)在网络上发送原始的数据报;44)收集网络通信过程中的统计信息。 JPcap JPcap6的是一个能够捕获,发送网络数据包的Java类库包。 这个包用到了LibPcap字和原始套接字API。 当前JPcap在在FreeBSD,Linux RedHat,Solaris和和Microsoft Windows/XP系统上已经做过测试,并且支持Ether,IPv4,IPv6,ARP/RARP,TCP,UDP,ICMPv4协议。 JPcap是一个Java类集合,它为网络数据包的捕获提供接口和系统支持。 ,此后几经修改,。 WinPcap研究WinPcap是是windows平台下一个免为费、公共的网络访问系统,是为Linux下的Libpcap移植到Windows平台下实现数据包捕获而设计的函数库,在设计WinPcap了时参照了Libpcap,使用方法也与Libpcap相似,基于Libpcap的程序能够很容易的到移植到Windows和平台下。 这个数据包捕获架构是由加州大学和Lawrence Berkeley实验室及其投稿者联合开发的,提供了用户级F BPF将过滤;,将BPF过滤增加到内对核中并增加了内核缓存;,该版对libpcap,并可支持更多的网络类型;11月月030日推出了2222版;33月月828日推出了了2233版;11月月O lO日推出了33O O版,增加了NPF设备驱动的一些新的特性及优化方案,。 WinPcap的官方主页是,能够在其主页上下载这个软件及其源代码,更重要的是,网站上还有很多开发文档,对于利用p WinPcap作为工具开发网络安全软件的编程人员有很大帮助。 WinPcap提供了四项功能:1)捕获原始数据报,包括共享网络上各主机发送/接收的以及相互之间交换的数据报;2;)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3)在网络上发送原始的数据报;4)收集网络通信过程中的统计信息。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 WinPcap如的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据包,也就是说,WinPcap不能阻塞,过滤或控制其它应用程序数据包的发收,它仅于仅只是监听共享网络上传送的数据包。 因此,它不能用于QoS调度程序或个人防火墙。 当前,WinPcap是开发的主要对象是windows NT/XP,这主要是因为在使用WinPcap的用户中只有一小部分是仅使用Windows95/98/Me,并且微软也已经放弃对了对win9x的开发。 有个软件叫sniffer pro能够作网管软件用,有很多功能,可监视问网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之间的数据流通情况,能够抓包,可对过滤器进行设置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可从中找到邮箱用户名和密码,还有ftp用户名和密码。 它还能够在使用交换机的网络上监听,不过要在交换机上装它的一个软件。 还叫有一个简单的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有ftp用户在名和密码,它只能用在HUB网络上。 著名软件tcpdump及及ids snort都是于基于libpcap外编写的,此外Nmap扫描器也是基于libpcap来捕获目标主机返回的数据包的。 WinPcap提供给用户两个不同级别的编程接口:与,。 对于一般的要与unix平台上libpcap兼容的开发来说,。 WinPcap内部结构Winpcap是针对Win232平台上的抓包和网络分析的一个架构,它由内核级的网络组包过滤器(Netgroup PacketFilter,NPF)、33个模块组成7。 11)网络组包过滤器。 它是运行于操作系统内核中的驱动程序,它直接与网卡驱动程序进行交互,获取在网络上传输的原始数据包。 F NPF与操作系统有关,WinPcap的开发组针对不同的Windows操作系统提供了不同版本的NPF。 在Win95/98/ME系统以中,它以VXD文件形式存在,在Windows NT和和Windows系统中,它以SYS文文件形式存在。 该模块提供了抓取数据包以及发送数据包的基本功能,此外还提供了一些高级功能,如数据包过滤系统和检测引擎。 22)的低级动态链接库。 不同的Windows版本在用户态和内核态之间提供互不相的同的接口,提供一个与系统无关的API。 、动态驱动器加载以及获得主机掩码及以太网冲突次数等低级操作。 33)高级动态链接库。 它提供了一组功能强大且跨平台的函数,利用这些函数本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 能够不去关心适配器和操作系统的类型。 、定义用户级缓冲以及包注入等高级功能。 ,个这样功能更强,使用也更为方便。 ,并且可能被转换成若干个NPF系统调用。 p WinPcap的主要函数库Winpcap函数库主要有如下函数:1)int pcap_findalldevs(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)int pcap_dispatch(pcap_t*,int,pcap_handler,u_char*)捕获数据包。 能够不被阻塞6)int pcap_next_ex(pcap_t*,struct pcap_pkthdr*,const u_char*)捕获数据包7)int pcap_pile(pcap_t*,struct bpf_program*,const char*,int,bpf_u_int32)与编译一个过滤设备,与pcap_setfilter()配合使用8)int pcap_setfilter(pcap_t*,struct bpf_program*)用来联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 3系统设计捕获数据的分析与还原对捕获数据的解析,其主要依据是网络协议中定义的各种包的类型和包的格式,下面依次对这些数据的格式与协议进行介绍与分析。 根据P TCP/IP协议,机器接收到一个以太网数据包时,数据从协议栈中由底向上升,同时去掉各层协议加上的报文首部,每层协议都要检查报文首部的协议表示,以确定数据的上层协议。 根据以太网数据链路层的帧格式,网络适配器的驱动程序会自此动计算校验和,并取走帧中的前同步码和校验和字段,因此WinPcap接收的数据包标仅仅是其中的帧头和载荷部分,即捕获到的是帧结构中的“目标C MAC地址”、“源C MAC地址”、“帧类型”、“帧中数据”这四部分。 在这种情况下,要实现对数据帧的还原,只需要将捕获的数据帧的前212个字节分别转换为十六进制数据,就能够清楚地看到C MAC地址,并通过对比本机的C MAC地址,还能够初步判断出该数据帧是本机发送的或是接收到的。 P IP报文的分析与还原首先来看下P IP数据报格式8,如图33-11所示:图图33-1P IP数据报格式版本4:4位,标识P IP版本号。 当前有IPv 4、IPv6。 我们当前所用的P IP协议基本本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 都是4IPv4版本。 首部长度4:4位,度指的是首部占t32bit字的数目,包括任何选项。 由图33-11可知首部所占字节数为(4+4+8+16+16+3+13+8+8+16+32+32+0)160bit,正好是32bit的的55倍,所以首部长度最小为55。 如果选项字段有其它数据,则这个值会大于55。 由上面也可知P IP首部最小长度为020字节,最大长度为(22的的44次方-11)*32/8060字节。 服务类型8:8位,其中:优先权3:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)-77(网络控制)。 4TOS:4位,分别表示最小延时、最大吞吐量、最高可靠性、最小费用。 如果44位S TOS子字段均为00,那么就意味着是一般服务。 未使用1:1位,必须置00。 总长度6:16位,总长度指首部和数据之和的长度,以字节为单位。 利用首部长度字段和总长度字段,就能够知道P IP数据报中数据内容的起始位置和长度。 由于该字段长616比特,所以P IP数据报最长可达565535字节。 标识6:16位,唯一地标识主机发送的每一份数据报。 通常每发送一份报文它的值就会加11。 P IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加11,并将此值赋给标识字段。 但这个“标识”并不是序号,因为P IP是无连接服务,数据报不存在按序接收的问题。 当数据报由于长度超过网络的U MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。 相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 在分片和重组技术中将会用到。 标志3:3位,但当前只有22位有意义。 标志字段中的最低位记为MF(More Fragment)。 1MF=1即表示后面“还有分片”的数据报;0MF=0表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为DF(Dont Fragment),意思是“不能分片”。 只有当0DF=0时才允许分片,具体定义如下:11)保留位1:1位;22)F DF字段1:1位,取值:0(允许数据报分段)、11(数据报不能分段);33)F MF字段1:1位,取值:0(数据包后面没有包,该包为最后的包)、11(数据包后面有更多的包)。 片偏移3:13位。 片偏移指出:较长的分组在分片后,某片在原分组中的相对位置,本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 也就是说,相对用户数据字段的起点,该片从何处开始。 片偏移以88个字节为偏移单位,这就是说,每个分片的长度一定是是88字节(464位)的整数倍。 生存时间8:8位,生存时间字段常用的的英文缩写是TTL(Time ToLive),表明是数据报在网络中的寿命。 由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。 最初的设计是以秒作为L TTL的单位。 每经过一个路由器时,就把L TTL减去数据报在路由器消耗掉的一段时间。 若数据报在路由器消耗的时间小于11秒,就把L TTL值减11。 当L TTL值为00时,就丢弃这个数据报。 一般能够理解为经过路由器的最大数目。 协议8:8位。 协议字段指出此数据报携带的数据是使用何种协议(上层协议),以便使目的主机的P IP层知道应将数据部分上交给哪个处理过程。 协议可包括TCP、UDP、T TELNET等,1=ICMP,6=TCP,17=UDP。 首部校验和6:16位,首部检验和字段是根据P IP首部计算的检验和码,它不对首部后面的数据进行计算。 ICMP,UDP,P TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。 为了计算一份数据报的P IP检验和,首先把检验和字段置为00,然后对首部中每个t16bit进行二进制反码求和(整个首部看成是由一串t16bit的字组成),结果存在检验和字段中。 当收到一份P IP数据报后,同样对首部中每个16bit进行二进制反码的求和。 由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全全11,如果结果不是全11(即检验和错误),那么P IP就丢弃收到的数据报,但是不生成差错报文,由上层去发现丢失的数据报并进行重传。 源源P IP地址2:32位,发送P IP的主机地址。 目的P IP地址2:32位,数据发往的P IP主机地址。 P UDP数据包的封装P UDP是一个简单的面向数据报的运输层协议8,进程的每个输出操作都正好产生一个P UDP数据报,并组装成一份待发送的P IP数据报。 P UDP数据报格式有首部和数据两个部分,如图33-22:本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 图图33-P2UDP数据报格式首部很简单,共88字节,如图33-33:图图33-P3UDP首部包括:源端口(Source Port)2:2字节,源端口号。 目的端口(Destination Port)2:2字节,目的端口号。 长度(Length)2:2字节,P UDP用户数据报的总长度,以字节为单位。 检验和(Checksum)2:2字节,用于校验P UDP数据报的数字段和包含P UDP数据报首部的“伪首部”。 尽管U UDP校验和的基本计算方法与IP首部校验和的计算方法类似(16bit字的二进制反码和),但是它们之间存在不同的地方,P UDP数据报长度能够为奇数字节,但是校验和的算法是把若干个t16bit字相加。 解决方法是必要时在最后增加填充字节00,这只是为了校验和的计算(也就是说,可能增加的填充字节不被传送)。 P UDP数据报和P TCP段都包含一个212字节长的伪首部,它是为了计算校验和而设置的。 伪首部包含P IP首部一些字段,其目的是让P UDP两次检查数据是否已经正确到达目的地(例如,P IP有没有接受地址不是本主机的数据报,以及P IP有没有把应传给另一高层的数据报传送给UDP)。 P UDP数据报中的伪首部格式如图33-44所示:本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 图图33-P4UDP数据报的伪首部格式P TCP数据包的封装P TCP数据被封装在一个P IP数据报中8,如图33-55所示:图图33-P5TCP数据在P IP数据报中的封装图图33-66示显示TCP首部的数据格式。 如果不计任选字段,它通常是020个字节。 图图33-6TCP包首部本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 ICMP数据包的封装IP协议提供的是面向无连接的服务,不存在关于网络连接的建立和维护过程,也不包括流量控制与差错控制功能,但需要对网络的状态有一些了解,因此在网际层提供了因特网控制消息协议(Inter controlmessage protocol,简称ICMP)来检测网络,包括路由、拥塞、服务质量等问题。 在网络中,P ICMP报文将作为P IP层数据报的数据,封装在P IP数据报中进行传输,如图33-77所示,但但P ICMP并不是高层协议,而仍被视为网络层协议。 图图33-P7ICMP数据在P IP数据报中的封装ICMP报文的类型很多,且各自又有各自的代码,因此,ICMP并没有一个统一的的报文格式,不同的ICMP类别分别有不同的报文字段。 ICMP报文只是在前44个字节有统一的格式,共有类型、代码和校验和33个字段。 如图33-88所示。 图图33-P8ICMP报文的格式其中类型字段表示P ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同情况;校验和字段用来检验整个P ICMP报文,接着的44个字节的内容与P ICMP的类型有关,再后面是数据字段,其长度取决于P ICMP的类型。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 4实现与分析p WinPcap环境配置WinPcap下载从从WinPcap配置11)装安装WinPcap驱动,安装完成后重启电脑。 22)的解压下载的WinPcap开发包,将Include文件夹里的文件全部复到制到VC目目的录下的Include文件夹中,同理复制开发包中Lib文件夹中的文件到VC目录下的Lib文件夹中。 33)+中,步骤如下:入进入VC+中,选取“工程”按钮,选取“设置”,点击“LINK”标签,在“对象/此库模块”。 至此WinPcap的环境配置完成。 程序的实现网络数据捕获的基本流程于一个完整的基于WinPcap的网络数据捕获程序应由两部分组成9:内核部分和用用户分析部分。 其中内核部分负责从网络中捕获和过滤数据,这能够通过调用WinPcap丰富的接口函数实现。 用户分析部分主要负责界面、数据转化与处理、格式化、协议分析等。 实现流程如图44-11所示。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 图图44-1基于p WinPcap的网络数据捕获基本流程简单地说来就是打开网卡,抓包,分析包。 #includevoid 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,&alldevs,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 descriptionavailable)n);if(i=0)printf(nNo interfacesfound!Make sureWinPcap isinstalled.n);return;/*不需要网卡列表,释放空间*/pcap_freealldevs(alldevs);/*打开设备*/if(adhandle=pcap_open(d-name,/设备名65536,/保证能捕获到数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS,/混杂模式1000,/读取超时时间NULL,/远程机器验证本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 errbuf/错误缓冲池)=NULL)/*开始捕获*/pcap_loop(adhandle,0,packet_handler,NULL);return0;void packet_handler(u_char*param,const structpcap_pkthdr*header,const u_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;(pkt_data);/量把收到的包放到一个向量myvector里面ltime=localtime(&header-);strftime(timestr,sizeof timestr,%H:%M:%S,ltime);ih=(ip_header*)(pkt_data+14);/从包中解开P IP给头并将其赋给ih ip_len=(ih-ver_ihl&0xf)*4;totallen=ntohs(ih-tlen);totallen+=18;(totallen);/量将整个包的大小值放到一个向量mycount里面PACKET*pkt=new PACKET;strcpy(pkt-timestr,timestr);memcpy(&(pkt-IpHead),ih,sizeof(ip_header);if(int(ih-proto)=17)/是如果是UDP包就从解开UDP头并将其赋给uh本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 uh=(udp_header*)(u_char*)ih+ip_len);memcpy(&(pkt-UdpHead),uh,sizeof(udp_header);if(int(ih-proto)=6)/是如果是TCP包就从解开TCP头并将其赋给thth=(tcp_header*)(u_char*)ih+ip_len);memcpy(&(pkt-TcpHead),th,sizeof(tcp_header);if(int(ih-pr

温馨提示

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

评论

0/150

提交评论