数据包捕获与分析摘要本课程设计通过Ethereal捕捉实时网络数据包,并根据网络协议分析流程对数据包在TCP/IP各层协议中进行实际解包分析,让网络研究人员对数据包的认识上升到一个感性的层面,为网络协议分析提供技术手段。最后根据Ethereal的工作原理,用VisualC++编写一个简单的数据包捕获与分析软件。关键词协议分析;Ethereal;数据包;VisualC++1引言本课程设计通过技术手段捕获数据包并加以分析,追踪数据包在TCP/IP各层的封装过程,对于网络协议的研究具有重要的意义。Ethereal是当前较为流行的图形用户接口的抓包软件,是一个可以用来监视所有在网络上被传送的包,并分析其内容的程序。它通常被用来检查网络工作情况,或是用来发现网络程序的bugs。通过ethereal对TCP、UDP、SMTP、telnet和FTP等常用协议进行分析,非常有助于网络故障修复、分析以及软件和协议开发。,它以开源、免费、操作界面友好等优点广为世界各地网络研究人员使用为网络协议分析搭建了一个良好的研究平台。1.1课程设计的内容(1)掌握数据包捕获和数据包分析的相关知识;(2)掌握Ethreal软件的安装、启动,并熟悉用它进行局域网数据捕获和分析的功能;(3)设计一个简单的数据包捕获与分析软件。1.2课程设计的要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。1.3课程设计平台WindowsXP;Ethereal;VisualC++2使用Ethereal对数据包进行捕获与分析2.1软件Ethereal简介Ethereal(Ethereal:ANetworkPacketSniffingTool)是当前较为流行的一种计算机网络调试和数据包嗅探软件。Ethereal基本类似于tcpdump,但Ethereal还具有设计完美的GUI和众多分类信息及过滤选项。用户通过Ethereal,同时将网卡插入混合模式,可以查看到网络中发送的所有通信流量。Ethereal应用于故障修复、分析、软件和协议开发以及教育领域。它具有用户对协议分析器所期望的所有标准特征,并具有其它同类产品所不具备的有关特征。Ethereal主要具有以下特征:在实时时间内,从网络连接处捕获数据,或者从被捕获文件处读取数据;Ethereal可以读取从tcpdump(libpcap)、网络通用嗅探器(被压缩和未被压缩)、SnifferTM专业版、NetXrayTM、Sunsnoop和atmsnoop、Shomiti/Finisar测试员、AIX的iptrace、Microsoft的网络监控器、Novell的LANalyzer、RADCOM的WAN/LAN分析器、ISDN4BSD项目的HP-UXnettl和i4btrace、Cisco安全IDSiplog和pppd日志(pppdump格式)、WildPacket的EtherPeek/TokenPeek/AiroPeek或者可视网络的可视UpTime处捕获的文件。此外Ethereal也能从Lucent/AscendWAN路由器和ToshibaISDN路由器中读取跟踪报告,还能从VMS的TCPIP读取输出文本和DBSEtherwatch。从以太网、FDDI、PPP、令牌环、IEEE802.11、ATM上的IP和回路接口(至少是某些系统,不是所有系统都支持这些类型)上读取实时数据。通过GUI或TTY模式tethereal程序,可以访问被捕获的网络数据。通过editcap程序的命令行交换机,有计划地编辑或修改被捕获文件。当前602协议可被分割。输出文件可以被保存或打印为纯文本或PostScript格式。通过显示过滤器精确显示数据。显示过滤器也可以选择性地用于高亮区和颜色包摘要信息。所有或部分被捕获的网络跟踪报告都会保存到磁盘中[1]。2.2利用Ethereal捕获数据包安装完Ethereal后,单击Capture下的Option菜单,打开捕获选项对话框,设置好捕捉接口(interface)和过滤器(capturefilter),设置混杂模式(promiscuousmode)选项(此选项使得网卡并不检验数据帧的目的地址,用以截获网上的任何帧),其他选项可采用默认设置如图2-1,再单击Start按钮即可实时截获数据包。用Ethereal的捕获窗口如图2-2,捕获到的实时网络数据包的部分截图见图2-3。所截获的数据包分别在包列表(PackList)、包细节(PacketDetails)和包字节(PackeBytes)三栏窗口中显示。其中上栏的包列表窗口按截获的时间顺序显示出数据包的基本信息:编号(代表收到数据包的次序)、时间、源地址、目的地址协议名称以及关于此数据包的摘要信息;中间栏的包细节窗口以树形显示当前数据包在各协议层的封装细节,包括首部和数据;下栏的包字节窗口则以十六进制和ASCII码显示被截获数据包的详细内容左边一栏显示偏移量,中间一栏显示十六进制数值,右边一栏显示解码后相对应的字符(控制字符示为1个点)。图2-1Ethereal的设置图2-2捕获状态窗口图2-3捕获的数据包2.2利用Ethereal对捕获数据包进行分析Ethereal是当前较为流行的一种计算机网络调试和数据包嗅探软件,是一个可以用来监视所有在网络上被传送的包,并分析其内容的程序。它通常被用来检查网络工作情况,或是用来发现网络程序的bugs。通过ethereal对TCP、UDP、SMTP、telnet和FTP等常用协议进行分析,非常有助于网络故障修复、分析以及软件和协议开发。(1)ARP协议分析ARP,全称AddressResolutionProtocol,地址解析协1它工作在数据链路层,在本层和硬件接口联系,同时对上压供服务。TP数据包常通过以太网发送,以太网设备并不识别32IP地址,它们是以48位以太网地址传输以太网数据包。必须把IP目的地址转换成以太网目的地址。因此,在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。图2-4就是对ARP捕获的状态窗口。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。网络当中经常会使用到ARP协议,所以可以使用Ethereal抓取网络中的ARP数据包,如图2-5,从图2-5中看到,已经捕获到了一些ARP的数据包,每个数据包占一行,比如第1个ARP数据包,从它的info信息里面可以看到对于这个数据包的简要的说明:Whohas10.28.23.140?Tell10.28.23.250。这个info表明ARP协议的主要功能:通过IP地址找对方的MAC地址。针对ARP协议还可以具体分析它的结构,以往的教学中学生只能从课本上看到ARP协议的图,如图6,学生容易产生疑问,难道真的是这样吗?在我们可以通过分析抓取到的数据包来切切实实地看一下它的结构到底是什.么样的,对照图2-6看一下到底是不是一致。随便找一个ARP的数据包,将其展开可以看到图2-7的结构,对比图2-7中框部分与图2-6中框部分,可以发现两者是一致的,通过对比学生就会对ARP的结构有更深刻的认识[2]。图2-4ARP捕获状态窗口图2-5捕获的ARP数据包以太网目的地址以太网源地址帧类型协议类型硬件类型OP发送端以太网地址发送端IP地址目的以太网地址目的IP地址硬件地址长度协议地址长度图2-6ARP报文结构图2-7ARP结构(2)利用Ethereal分析TCP/IP机制TCP是一种面向连接的、可靠的传输层协议,TCP数据传(只有连接建立后才可进行数据传输)需要通过在客户端和服端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”,如图2-8,即发送方先发送连接请求,然后接受方进行连接确认,最发送方对接受方再次进确认。下面就以Ethereal捕获的建TCP连接过程的三个数据包为例对TCP/IP协议进行分析。SYN,SEQ=xSYN,SEQ=y,ACK=x+1ACK=y+1图2-8三次握手示意图为了能够捕获到“三次握手”过程中的数据包,首先让Ethereal一直保持捕获状态(图2-9),因为是通过TCP来建立的,可以将Ethereal的过滤器设置为TCP,此时只捕获所有经过计算机的TCP协议数据包。图2-9TCP捕获状态窗口在保持捕获的状态下,打开一个新的网页,如,由于访问网页首先需要通过“三次握手”建立连接,然后才能进行数据的传输,此时,Ethereal就可以捕获到在访问网页过程中建立连接的TCP数据包(图2-10)图2-10TCP捕获状态窗口在捕获状态窗口中点击停止,将所有捕获到的数抿所显示出图2-11显示的就是所捕到的前4个数据包,从图中可以看到1号数据包一3号数据包是连接建立过程中的数据包,4号数据包是在连接建立完成以后开始传输数据。图2-11捕获到的数据包客户端发送连接请求,从图2-12可以看出,该数据包封装了三个头信息:以太网(Eth-ernet)帧、IP数据报(IP数据报首部格式如图2-12)和TCP报文段(TCP报文段固定首部格式如图2-13)。在物理链路层,数据以帧的方式进行传输。以太网帧头信息中,描述了该数据包的接收方MAC(MAC的结构如图2-14)地址为00:03:0f:00:0c:4b发起连接请求的源主机MAC为00:03:0d:a4:0f:72,在帧中封装的协议类型type值为0x0800,即IP数据报。在网络层,加工的主要数据对象是IP数据报。IP协议是TCPIP协议族中的核心协议之一,所有的TCP、UDP、ICMP数据都以IP数据报格式传输。从以上请求数据包的IP首部可以看出,此IP数据报版本号(version)为4(即这个数据报为IPv4),首部(headlength)为20bytes,服务类型(servicesfield)为0x00,数据报总长(totallength,即IP首部+数据载荷)为48,标识(identification)为0x96b53,标志(flags)为0x04表示报文不分段,段偏移(fragmenoffset)为0,生存时间(timetolive)为128,数据报中上层协议类型protocol值为0x06(即TCP报文段),头部校验和0x1206表示正确,请求主机的IP地址为10.10.23.226,目的主机的IP地址为58.248.245.40。在运输层,主要数据对象是TCP报文。在以上的TCP报文段中,描述了请求方源端口号(sourceport)为1615;目的端口号(destinationport)为80,其中0是HTTP协议的保留端口号;序列号SEQ是本次连接的初始序号,因此在连接请求时相对初始值是0,其实际值是246815a1;确认号是00000070;头部长度(headerlength)为28bytes;标志位(flags)为Ox0002,指示ACK标志为0表明确认号被忽略,SYN=1表示正在进行连接请求,通过SYN和ACK也可以用来区分ConnectionRequest和ConnectionAccepted,在连接请求中,SYN=1、ACK=0,连接响应时,SYN=1、ACK=1;PSH为0;窗口字段(windowsize)指示发送方想要接收的最大字节数为65535;校验和(checksum)为0xf6a表明正确;最后是8bytes的选项字段[3]。比特04816192431版本首部长度总长度服务类型标识标志片偏移生存时间协议首部检验和源地址目标地址图2-12IP数据报首部格式比特08162431目的端口确认号源端口序号数据偏移保留URGACKPSHPSTSYNFIN窗口检验和紧急指针图2-13TCP报文段固定首部格式字节66246-1054目的M