1、ethereal教程 官方网站Ethereal is used by network professionals around the world for troubleshooting, analysis, software and protocol development, and education. It has all of the standard features you would expect in a protocol analyzer, and several features not seen in any other product. Its open source
2、license allows talented experts in the networking community to add enhancements. It runs on all popular computing platforms, including Unix, Linux, and Windows. Ethereal是一个图形用户接口(GUI)的网络嗅探器,能够完成与Tcpdump相同的功能,但操作界面要友好很多。Ehtereal和Tcpdump都依赖于pcap库(libpcap),因此两者在许多方面非常相似(如都使用相同的过滤规则和关键字)。Ethereal和其它图形化的
3、网络嗅探器都使用相同的界面模式,如果能熟练地使用Ethereal,那么其它图形用户界面的嗅探器基本都可以操作。 Ethereal的安装 在网站上可以下载到最新的Ethereal源码包。用Ethereal分析数据包 Ethereal和其它的图形化嗅探器使用基本类似的界面,整个窗口被分成三个部分:最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。 使用Ethereal可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。图4是在Eth
4、ereal中对一个HTTP数据包进行分析时的情形。 在图3最上边的数据包列表中,显示了被截获的数据包的基本信息。从图中可以看出,当前选中数据包的源地址是10.1.197.162,目的地址为61.135.150.65,该数据包所属的协议是超文本传输协议(HTTP)。更详细的信息表明该数据包中含有一个HTTP的GET命令,要求下载starrtlog.js文件到客户端的Web浏览器。图4中间是协议树,通过协议树可以得到被截获的数据包的更多信息,如主机的MAC地址(Ethernet II)、IP地址(Internet Protocol)、TCP端口号(Transmission Control Prot
5、ocol),以及HTTP协议的具体内容(Hypertext Trnasfer Protocol)。通过扩展协议树中的相应节点,可以得到该数据包中携带的更详尽的信息。 图4最下边是以十六制显示的数据包的具体内容,这是被截获的数据包在物理媒体上传输时的最终形式,当在协议树中选中某行时,与其对应的十六进制代码同样会被选中,这样就可以很方便地对各种协议的数据包进行分析。 Ethereal提供的图形化用户界面非常友好,管理员可以很方便地查看到每个数据包的详细信息,协议树及其对应的十六进制表示对分析每个数据包的目的很有帮助,综合使用Ethereal和Tcpdump能够基本满足网络管理员在Linux系统上的
6、所有嗅探要示。Ethereal使用入门ethereal 可以用来从网络上抓包,并能对包进行分析。下面介绍windows 下面ethereal 的使用方法安装1)安装winpcap,下载地址http:/netgroup-serv.polito.it/winpcap/install/Default.htm 2)安装ethereal ,下载地址 使用windows 程序,使用很简单。启动ethereal 以后,选择菜单Capature-Start ,就OK 了。当你不想抓的时候,按一下stop, 抓的包就会显示在面板中,并且已经分析好了。下面是一个截图:ethereal使用capture选项nter
7、face: 指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了Limit each packet: 限制每个包的大小,缺省情况不限制Capture packets in promiscuous mode: 是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。Filter:过滤器。只抓取满足过滤规则的包(可暂时略过) File:如果需要将抓到的包写到文件中,在这里输入文件名称。use ring buffer: 是否使用循环缓冲。缺省情况下不使用,即一直抓包。注意,循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲
8、,还需要设置文件的数目,文件多大时回卷其他的项选择缺省的就可以了 ethereal的抓包过滤器 抓包过滤器用来抓取感兴趣的包,用在抓包过程中。 抓包过滤器使用的是libcap 过滤器语言,在tcpdump 的手册中有详细的解释,基本结构是: not primitive and|or not primitive . 个人观点,如果你想抓取某些特定的数据包时,可以有以下两种方法,你可以任选一种, 个人比较偏好第二种方式: 1、在抓包的时候,就先定义好抓包过滤器,这样结果就是只抓到你设定好的那些类型的数 据包; 2、先不管三七二十一,把本机收到或者发出的包一股脑的抓下来,然后使用下节介绍的显 示过滤
9、器,只让Ethereal 显示那些你想要的那些类型的数据包; etheral的显示过滤器(重点内容) 在抓包完成以后,显示过滤器可以用来找到你感兴趣的包,可以根据1)协议2)是否存在某个域3)域值4)域值之间的比较来查找你感兴趣的包。举个例子,如果你只想查看使用tcp 协议的包,在ethereal 窗口的左下角的Filter 中输入tcp, 然后回车,ethereal 就会只显示tcp 协议的包。如下图所示:值比较表达式可以使用下面的操作符来构造显示过滤器自然语言类c 表示举例eq = ip.addr=10.1.10.20 ne != ip.addr!=10.1.10.20 gt frame.
10、pkt_len10 lt frame.pkt_len= frame.pkt_len=10 le = frame.pkt_lenPreference 3)单击Protocols 前面的+号,展开Protocols 4)找到Q931 ,并单击5)确保Desegment. TCP segments 是选中的(即方框被按下去)6)单击TCP 7)确保Allow.TCP streams 是选中的8)确保没有选中Check.TCP checksum 和Use.sequence numbers 9)单击TPKT 10)确保Desegment.TCP segments 是选中的11)点击Save,然后点击Ap
11、ply ,然后点击OK 你也完全可以不断地重新安装新版本winpcap 和ethreal, 这样就可以不需在旧的ethreal 的版本中安装新的插件来支持新的协议插件。这也是懒人的一种做法Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Ethereal添加新的协议解析器,如今Ethereal已经支持五
12、百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Ehereal良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。1 Ethereal的捕包平台网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据
13、包从链路层接收,至少将其还原至传输层以上,以供上层分析。在Linux系统中, 1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进在window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windo
14、ws系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包2层次化的数据包协议分析方法取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据
15、交给传输层分析,这样一直进行下去直到应用层 Ip | Tcp udp | HTTP TFTP由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。上图就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征
16、字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。 Tcp.port=21就可以认为是ftp协议, 特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行
17、,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。 3 基于插件技术的协议分析器 所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它著名的应用实例有:媒体播放器winamp、微软的网络浏览器ie等。由于现在网络协议种类繁多,为了可以随
18、时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。在协议分析器中新增加一个协议插件一般需要插件安装或者注册,插件初始化,插件处理3个步骤,下面以Ethereal为例进行分析如何利用插件技术新增加一个协议分析模块。Ethereal由于采用插件技术,一个新加入开发的程序员开发一种新的协议分析模块的时候不需要了解所有的代码,他只需要写好这个协议模块的函数后,写一个格式为proto_reg_handoff_XXX的函数,在函数内调用注册函数告诉系统在
19、什么时候需要调用这个协议模块。比如你事先写好了一个名为dissect_myprot的协议解析模块,它是用来解析tcp协议端口为250的数据。可以利用这些语句来将这个解析器注册到系统中proto_reg_handoff_myprot(void) dissector_handle_t myprot_handle; myprot_handle = create_dissector_handle(dissect_myprot, proto_myprot); dissector_add(tcp.port, 250, myprot_handle);这段代码告诉系统当tcp协议数据流端口为250的时候要调用
20、dissect_myprot这个函数模块。在Ethereal中有一个角本专门来发现开发者定义的类式proto_reg_handoff_xxx这样的注册函数名,然后自动生成调用这些注册函数的代码。这样开发者不需要知道自己的注册函数如何被调用的。这样一个新的协议分析模块就加入到系统中了。由于采用了插件方式,Ethereal良好的结构设计让开发者只需要关系自己开发的协议模块,不需要关心整个系统结构,需要将模块整合进系统只需要写一个注册函数即可,连初始化时调用这个注册函数都由脚本自动完成了。正是因为有很好的体系结构,这个系统才能够开发出如此多的协议解析器尽管Ethereal是目前最好的开放源码的网络分
21、析系统,但Ethereal仍然有一些可以改进的地方,一个优秀的网络分析器,尽可能的正确分析出数据协议和高效的处理数据是两个重要的指标。在协议识别方面Ethereal大多采用端口识别,有少量协议采用内容识别。这就让一些非标准端口的协议数据没有正确解析出来。比如ftp协议如果不是21端口的话,Ethereal就无法识别出来,只能作为tcp数据处理。另外对于内容识别式。Ethereal是将所以内容识别的函数组成一张入口表。每次协议数据需要内容识别时,按字母顺序逐个调用表里的每个识别函数。比如对于识别yahoo massanger协议。主要是看数据前几个字节是不是ymsg.由于协议名为y开头。所以当识
22、别出协议时已经把所有内容识别函数调用了一遍。这些都是由于Ethereal没有实现tcp协议栈,无法做到流级别的识别。导致在协议识别方面有点缺陷。各位,想进一步了解Ethereal的请搜索 Ethereal Packet Sniffing 这本书,网上有下载的Ethereal的基本操作 欲劫获网络上的数据包,只要指定网卡(NetworkInterfaceCad),接着按Capture即可。 按Capture后,Ethereal会开始统计目前所截获的数据包;如下图所示,欲停止只需按Stop即可。下图为Ethera截取数据包的页面。由上而下分別是功能表栏、工具栏截取数据包的列表以及封包的详细资料,最
23、下面则是封包的內容,这时是以16进制及ASCII编码的方式来表示。其中在封包列表这部份,最前面的编号代表收到封包的次序,其次是时间、来源地址、目的地址,最后则是协议的名称以及关于此封包的摘要信息。另外,如果觉得截获的的封包数量太多的話,在抓取封包之前,可用Capture Filter的功能,选择想要过滤的协议即可。若是想将截获到的数据包列表资料储存起来,可以执行FileSave或Save As将资料储存起来,存储对话框如下图所示:这些储存的数据包资料可以在以后执行Open来加以开启。使用Ethereal学习TCP/IP协议实验环境搭建: 操作系统为Windows2000 server 版,因为
24、在寝室里只有一台电脑,而且没有网卡(只有一个56K 的老猫),所以安装了虚拟机VMware-workstation( 网上很多地方可以下载,这里就不提供下载了,安装也很简单); 虚拟操作系统是RedHat 8.0 ,为了节省空间和加快速度,没有安装图形界面。关于虚拟系统的安装可以在Google 上搜一下。这里说一下 Virtual Networks 的设置,如图1-1:图1-1 设置虚拟网络两个虚拟网络分别是VMnet1 地址为192.168.126.0 和VMnet8 地址为192.168.216.0,主操作系统windows2000, 安装了两个虚拟网卡,地址分别是192.168.126.
25、1 和192.168.216.1, 主操作系统和虚拟系统的网络关系是Custom 模式,如图1-2: 图1-2 设置虚拟机网卡打开虚拟机,以root 用户登录redhat,输入setup,设置虚拟机IP 地址为192.168.126.128, 如图1-3: 图1-3 设置Linux IP 地址好了,设置完了。当然,这只是因为条件限制才如此的,在局域网中就不用这么麻烦了。实验目的: 巩固对Ethernet II 封包、ARP 分组及IP、ICMP 数据包的认识嗯,现在开始了。打开Ethereal,在菜单Capture 下点击Interfaces, 选取要抓包的网卡, 这里选取地址为192.168
26、.126.1 的这个网卡抓取数据包,如图1-4: 图1-4 选择抓取数据包网卡之后在主操作系统中使用ping 192.168.126.128 t 的命令,来ping 虚拟机。好,我们来看看抓取的数据包。图1-5 ARP 广播包从Ethereal 的第一栏中,我们看到这是个ARP 解析的广播包,如图1-5。由于这个版本的Ethereal 使用的是Ethernet II 来解码的,我们先看看Ethernet II 的封装格式。如下图1-6: 图1-6 以太网封包格式注意这个和802.3 是有区别的,802.3 的封包格式如图1-7:图1-7 802.3 封包格式尽管Ethernet II 和802
27、.3 的封包格式不同,但Ethereal 在解码时,都是从“类型”字段来判断一个包是IP 数据报还是ARP 请求/应答或RARP 请求/应答。从Ethernet II 知道了是ARP 解析以后,我们来看看Ethereal 是如何判断是ARP 请求呢还是应答的。我们先复习一下以太网的ARP 请求和应答的分组格式,如图1-8。图1-8 分组格式从上图中我们了解到判断一个ARP 分组是ARP 请求还是应答的字段是“op”,当其值为00001 时是请求,为00002 时是应答。如图1-9、1-10。图1-9 ARP 请求 图1-10 ARP 应答 我们看看第三个帧的内容。第三帧“类型”显示是IP 数据
28、报,如图1-11: 图1-11 ICMP ping 包同样,我们先复习一下IP 包的封包格式,如图1-12:图1-12 IP 封包格式关于IP 封包各字段的内容及意义,这里就不再详述了,可以参见三卷本的TCP/IP, 的“资源共享”版里有下载。我们主要看看TTL,从图1-13 和1-14 的比较来看,图1-13 中的TTL 是128,而图1-14 中的TTL 却是64,什么原因呢?原来图1-13 中的主机是Windows2000 ,而1-14 中的主机是Linux,看来不同操作系统的TTL 是不同的。图1-13 Windows 主机的TTL 图1-14 Linux 主机的TTL 好了我们来看看ICMP 报文吧,先看看它的封包格式,如图1-15: 图1-15 ICMP 封包类型关于ICMP 的“类型”和“代码”字段,这里有一个表,如图1-16: 图1-16 ICMP 报文类型ICMP 报文,我们主要对照图1-16 看抓包的情况。 图1-17 ping 请求图1-18 ping 应答
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1