ethereal教程.docx

上传人:b****2 文档编号:24136368 上传时间:2023-05-24 格式:DOCX 页数:24 大小:1.47MB
下载 相关 举报
ethereal教程.docx_第1页
第1页 / 共24页
ethereal教程.docx_第2页
第2页 / 共24页
ethereal教程.docx_第3页
第3页 / 共24页
ethereal教程.docx_第4页
第4页 / 共24页
ethereal教程.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

ethereal教程.docx

《ethereal教程.docx》由会员分享,可在线阅读,更多相关《ethereal教程.docx(24页珍藏版)》请在冰豆网上搜索。

ethereal教程.docx

ethereal教程

官方网站

Ethereal®isusedbynetworkprofessionalsaroundtheworldfortroubleshooting,analysis,softwareandprotocoldevelopment,andeducation.Ithasallofthestandardfeaturesyouwouldexpectinaprotocolanalyzer,andseveralfeaturesnotseeninanyotherproduct.Itsopensourcelicenseallowstalentedexpertsinthenetworkingcommunitytoaddenhancements.Itrunsonallpopularcomputingplatforms,includingUnix,Linux,andWindows.

Ethereal是一个图形用户接口(GUI)的网络嗅探器,能够完成与Tcpdump相同的功能,但操作界面要友好很多。

Ehtereal和Tcpdump都依赖于pcap库(libpcap),因此两者在许多方面非常相似(如都使用相同的过滤规则和关键字)。

Ethereal和其它图形化的网络嗅探器都使用相同的界面模式,如果能熟练地使用Ethereal,那么其它图形用户界面的嗅探器基本都可以操作。

Ethereal的安装

在网站上可以下载到最新的Ethereal源码包。

用Ethereal分析数据包

Ethereal和其它的图形化嗅探器使用基本类似的界面,整个窗口被分成三个部分:

最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。

使用Ethereal可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。

图4是在Ethereal中对一个HTTP数据包进行分析时的情形。

在图3最上边的数据包列表中,显示了被截获的数据包的基本信息。

从图中可以看出,当前选中数据包的源地址是10.1.197.162,目的地址为61.135.150.65,该数据包所属的协议是超文本传输协议(HTTP)。

更详细的信息表明该数据包中含有一个HTTP的GET命令,要求下载starrtlog.js文件到客户端的Web浏览器。

图4中间是协议树,通过协议树可以得到被截获的数据包的更多信息,如主机的MAC地址(EthernetII)、IP地址(InternetProtocol)、TCP端口号(TransmissionControlProtocol),以及HTTP协议的具体内容(HypertextTrnasferProtocol)。

通过扩展协议树中的相应节点,可以得到该数据包中携带的更详尽的信息。

图4最下边是以十六制显示的数据包的具体内容,这是被截获的数据包在物理媒体上传输时的最终形式,当在协议树中选中某行时,与其对应的十六进制代码同样会被选中,这样就可以很方便地对各种协议的数据包进行分析。

Ethereal提供的图形化用户界面非常友好,管理员可以很方便地查看到每个数据包的详细信息,协议树及其对应的十六进制表示对分析每个数据包的目的很有帮助,综合使用Ethereal和Tcpdump能够基本满足网络管理员在Linux系统上的所有嗅探要示。

Ethereal使用入门

ethereal可以用来从网络上抓包,并能对包进行分析。

下面介绍windows下面ethereal的使用方法

安装

1)安装winpcap,下载地址http:

//netgroup-serv.polito.it/winpcap/install/Default.htm2)安装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.20gt>frame.pkt_len>10lt=frame.pkt_len>=10le<=frame.pkt_len<=10

  表达式组合可以使用下面的逻辑操作符将表达式组合起来自然语言类c表示举例and&&逻辑与,比如ip.addr=10.1.10.20&&tcp.flag.finor||逻辑或,比如ip.addr=10.1.10.20||ip.addr=10.1.10.21xor^^异或,如tr.dst[0:

3]==0.6.29xortr.src[0:

3]==not!

逻辑非,如!

llc

例如:

我想抓取IP地址是192.168.2.10的主机,它所接收收或发送的所有的HTTP报文,那么合适的显示Filter(过滤器)就是:

在ethereal使用协议插件

ethereal能够支持许多协议,但有些协议需要安装插件以后才能解,比如H.323,以H.323协议为例,首先下载ethereal的H.323插件,下载地址http:

//www.voice2sniff.org/下载完了以后将文件(h323.dll)解压到ethereal安装目录的plugin\0.9.x目录下面,比如我的是0.9.11,然后,需要进行一下设置1)启动ethereal2)菜单Edit->Preference3)单击Protocols前面的"+"号,展开Protocols4)找到Q931,并单击5)确保"Desegment....TCPsegments"是选中的(即方框被按下去)6)单击TCP7)确保"Allow....TCPstreams"是选中的8)确保没有选中"Check....TCPchecksum"和"Use....sequencenumbers"9)单击TPKT10)确保"Desegment....TCPsegments"是选中的11)点击Save,然后点击Apply,然后点击OK你也完全可以不断地重新安装新版本winpcap和ethreal,这样就可以不需在旧的ethreal的版本中安装新的插件来支持新的协议插件。

这也是懒人的一种做法

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

 | \

HTTP TFTP

  由于网络协议种类很多,就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的请搜索EtherealPacketSniffing这本书,网上有下载的

Ethereal的基本操作

欲劫获网络上的数据包,只要指定网卡(Network Interface Cad),接着按Capture即可。

按Capture后,Ethereal会开始统计目前所截获的数据包;如下图所示,欲停止只需按Stop即可。

下图为Ethera截取数据包的页面。

由上而下分別是功能表栏、工具栏截取数据包的列表以及封包的详细资料,最下面则是封包的內容,这时是以16进制及ASCII编码的方式来表示。

其中在封包列表这部份,最前面的编号代表收到封包的次序,其次是时间、来源地址、目的地址,最后则是协议的名称以及关于此封包的摘要信息。

另外,如果觉得截获的的封包数量太多的話,在抓取封包之前,可用CaptureFilter的功能,选择想要过滤的协议即可。

若是想将截获到的数据包列表资料储存起来,可以执行[File]→[Save]或[SaveAs]将资料储存起来,存储对话框如下图所示:

这些储存的数据包资料可以在以后执行[Open]来加以开启。

 

使用Ethereal学习TCP/IP协议

实验环境搭建:

操作系统为Windows2000server版,因为在寝室里只有一台电脑,而且没有网卡(只有一个56K的老猫),所以安装了虚拟机VMware-workstation(网上很多地方可以下载,这里就不提供下载了,安装也很简单);虚拟操作系统是RedHat8.0,为了节省空间和加快速度,没有安装图形界面。

关于虚拟系统的安装可以在Google上搜一下。

这里说一下VirtualNetworks的设置,如图1-1:

图1-1设置虚拟网络

两个虚拟网络分别是VMnet1地址为192.168.126.0和VMnet8地址为192.168.216.0,主操作系统windows2000,安装了两个虚拟网卡,地址分别是192.168.126.1和192.168.216.1,主操作系统和虚拟系统的网络关系是Custom模式,如图1-2:

图1-2设置虚拟机网卡

打开虚拟机,以root用户登录redhat,输入setup,设置虚拟机IP地址为192.168.126.128,如图1-3:

图1-3设置LinuxIP地址

好了,设置完了。

当然,这只是因为条件限制才如此的,在局域网中就不用这么麻烦了。

实验目的:

巩固对EthernetII封包、ARP分组及IP、ICMP数据包的认识

嗯,现在开始了。

打开Ethereal,在菜单Capture下点击Interfaces,选取要抓包的网卡,这里选取地址为192.168.126.1的这个网卡抓取数据包,如图1-4:

图1-4选择抓取数据包网卡

之后在主操作系统中使用ping192.168.126.128–t的命令,来ping虚拟机。

好,我们来看看抓取的数据包。

图1-5ARP广播包

从Ethereal的第一栏中,我们看到这是个ARP解析的广播包,如图1-5。

由于这个版本的Ethereal使用的是EthernetII来解码的,我们先看看EthernetII的封装格式。

如下图1-6:

图1-6以太网封包格式

注意这个和802.3是有区别的,802.3的封包格式如图1-7:

图1-7802.3封包格式

尽管EthernetII和802.3的封包格式不同,但Ethereal在解码时,都是从“类型”字段来判断一个包是IP数据报还是ARP请求/应答或RARP请求/应答。

从EthernetII知道了是ARP解析以后,我们来看看Ethereal是如何判断是ARP请求呢还是应答的。

我们先复习一下以太网的ARP请求和应答的分组格式,如图1-8。

图1-8分组格式

从上图中我们了解到判断一个ARP分组是ARP请求还是应答的字段是“op”,当其值为0×0001时是请求,为0×0002时是应答。

如图1-9、1-10。

图1-9ARP请求

图1-10ARP应答

我们看看第三个帧的内容。

第三帧“类型”显示是IP数据报,如图1-11:

图1-11ICMPping包

同样,我们先复习一下IP包的封包格式,如图1-12:

图1-12IP封包格式

关于IP封包各字段的内容及意义,这里就不再详述了,可以参见三卷本的TCP/IP,的“资源共享”版里有下载。

我们主要看看TTL,从图1-13和1-14的比较来看,图1-13中的TTL是128,而图1-14中的TTL却是64,什么原因呢?

原来图1-13中的主机是Windows2000,而1-14中的主机是Linux,看来不同操作系统的TTL是不同的。

图1-13Windows主机的TTL

图1-14Linux主机的TTL

好了我们来看看ICMP报文吧,先看看它的封包格式,如图1-15:

图1-15ICMP封包类型

关于ICMP的“类型”和“代码”字段,这里有一个表,如图1-16:

图1-16ICMP报文类型

ICMP报文,我们主要对照图1-16看抓包的情况。

图1-17ping请求

图1-18ping应答

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1