您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 应用及传输层协议报文承载信息分析
实验三应用层、传输层协议报文承载信息分析【实验目的】熟悉协议分析工具软件使用,分析应用层及传输层报文承载的信息【实验要求】1、协议分析工具软件的使用,比如WireShark;2、对SNMP及HTTP数据包进行分析,并验证两个高层协议的编码方法;3、对基于HTTP协议的登录验证报文进行截取分析,提取并识别用户名密码;在分析利用浏览器进行登录验证的基础上,手动模拟基于HTTP协议的Web程序验证登陆过程;4、截取基于UDP包,分析UDP协议信息(可如截获即时通讯QQ的数据报);5、对依赖Telnet应用程序建立的TCP连接中的TCP报文数据特点进行分析;(选作)6、对大量的数据上传(比如基于HTTP或FTP的较大文件的上传),通过协议分析观察是否有拥塞控制的表征。(选作)【实验报告要求】1.实验报告须按实验成果提交2.实验名称按本指导书给出的实验名称填写3.实验报告写明实验日期、班级、姓名、学号4.对SNMP及HTTP数据包进行分析,陈述两个高层协议的编码方法的不同,并把截图写入报告。5.对截获即时通讯QQ的数据报依据UDP报头进行分析,并把截图写入报告。【实验原理】Ethereal协议分析系统介绍Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由GeraldCombs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Ethereal添加新的协议解析器,如今Ethereal已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Ehereal良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。1Ethereal的捕包平台网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。在Linux系统中,1992年LawrenceBerkeleyLab的StevenMcCanne和VanJacobson提出了包过滤器的一种的实现,BPF(BSDPacketFilter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进在window系统中,意大利人FulvioRisso和LorisDegioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包2层次化的数据包协议分析方法取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层Ip|\Tcpudp|\HTTPTFTP由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。上图就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。3基于插件技术的协议分析器所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它著名的应用实例有:媒体播放器winamp、微软的网络浏览器ie等。由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。在协议分析器中新增加一个协议插件一般需要插件安装或者注册,插件初始化,插件处理3个步骤,下面以Ethereal为例进行分析如何利用插件技术新增加一个协议分析模块。Ethereal由于采用插件技术,一个新加入开发的程序员开发一种新的协议分析模块的时候不需要了解所有的代码,他只需要写好这个协议模块的函数后,写一个格式为proto_reg_handoff_XXX的函数,在函数内调用注册函数告诉系统在什么时候需要调用这个协议模块。比如你事先写好了一个名为dissect_myprot的协议解析模块,它是用来解析tcp协议端口为250的数据。可以利用这些语句来将这个解析器注册到系统中proto_reg_handoff_myprot(void){dissector_handle_tmyprot_handle;myprot_handle=create_dissector_handle(dissect_myprot,proto_myprot);dissector_add(\tcp.port\,250,myprot_handle);}这段代码告诉系统当tcp协议数据流端口为250的时候要调用dissect_myprot这个函数模块。在Ethereal中有一个角本专门来发现开发者定义的类式proto_reg_handoff_xxx这样的注册函数名,然后自动生成调用这些注册函数的代码。这样开发者不需要知道自己的注册函数如何被调用的。这样一个新的协议分析模块就加入到系统中了。由于采用了插件方式,Ethereal良好的结构设计让开发者只需要关系自己开发的协议模块,不需要关心整个系统结构,需要将模块整合进系统只需要写一个注册函数即可,连初始化时调用这个注册函数都由脚本自动完成了。正是因为有很好的体系结构,这个系统才能够开发出如此多的协议解析器尽管Ethereal是目前最好的开放源码的网络分析系统,但Ethereal仍然有一些可以改进的地方,一个优秀的网络分析器,尽可能的正确分析出数据协议和高效的处理数据是两个重要的指标。在协议识别方面Ethereal大多采用端口识别,有少量协议采用内容识别。这就让一些非标准端口的协议数据没有正确解析出来。比如ftp协议如果不是21端口的话,Ethereal就无法识别出来,只能作为tcp数据处理。另外对于内容识别式。Ethereal是将所以内容识别的函数组成一张入口表。每次协议数据需要内容识别时,按字母顺序逐个调用表里的每个识别函数。比如对于识别yahoomassanger协议。主要是看数据前几个字节是不是’ymsg’.由于协议名为y开头。所以当识别出协议时已经把所有内容识别函数调用了一遍。这些都是由于Ethereal没有实现tcp协议栈,无法做到流级别的识别。导致在协议识别方面有点缺陷。Ethereal使用入门ethereal可以用来从网络上抓包,并能对包进行分析。下面介绍windows下面ethereal的使用方法安装1)安装winpcap,下载地址)安装ethereal,下载地址使用windows程序,使用很简单。启动ethereal以后,选择菜单Capature-Start,就OK了。当你不想抓的时候,按一下stop,抓的包就会显示在面板中,并且已经分析好了。下面是一个截图:ethereal使用-capture选项nterface:指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了Limiteachpacket:限制每个包的大小,缺省情况不限制Capturepacketsinpromiscuousmode:是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。Filter:过滤器。只抓取满足过滤规则的包(可暂时略过)File:如果需要将抓到的包写到文件中,在这里输入文件名称。useringbuffer:是否使用循环缓冲。缺省情况下不使用,即一直抓包。注意,循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目,文件多大时回卷其他的项选择缺省的就可以了ethereal的抓包过滤器抓包过滤器用来抓取感兴趣的包,用在抓包过程中。抓包过滤器使用的是libcap过滤器语言,在tcpdump的手册中有详细的解释,基本结构是:[not]primitive[and|or[not]primitive...]个人观点,如果你想抓取某些特定的数据包时,可以有以下两种方法,你可以任选一种,个人比较偏好第二种方式:1、在抓包的时候,就先定义好抓包过滤器,这样结果就是只抓到你设定好的那些类型的数据包;2、先不管三七二十一,把本机收到或者发出的包一股脑的抓下来,然后使用下节介绍的显示过滤器,只让Ethereal显示那些你想要的那些类型的数据包;etheral的显示过滤器(重点内容)在抓包完成以后,显示过滤器可以用来找到你感兴趣的包,可以根据1)协议2)是否存在某个域3)域值4)域值之间的比较来查找你感兴趣的包。举个例子,如果你只想查看使用tcp协议的包,在ethereal窗口的左下角的Filter中输入tcp,然后回车,ethereal就会只显示tcp协议的包。如下图所示:值比较表达式可以使用下面的操作符来构造显示过滤器自然语言类c表示举例eq==ip.addr==10.1.10.20ne!=ip.addr!=10.1.10.20gtframe.pkt_len10ltframe.pkt_len10ge=frame.pkt_len=10le=frame.pkt_len=
本文标题:应用及传输层协议报文承载信息分析
链接地址:https://www.777doc.com/doc-2420205 .html