[转]网络协议分析工具Ethereal的使用

 

[转]网络协议分析工具Ethereal的使用

一、网络协议:Ethereal协议分析系统介绍
Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。 Ethereal起初由Gerald Combs开发,随后由一个松散的 Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为 Ethereal添加新的协议解析器,如今 Ethereal已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于 Ehereal良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。

1 Ethereal的捕包平台
  网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。
在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,它的设计目标就是为windows
  系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。
  Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包

2层次化的数据包协议分析方法
  取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层
    Ip
    | /
  Tcp udp
  |   /
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注册的解析模块处理。这样由根节点开始一层层解析下去。
  由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。
 

二、ethereal 的使用

ethereal可以用来从网络上抓包,并能对包进行分析。下面介绍windows下面ethereal 的使用方法。
    1、安装
       下载安装winpcap
 
http://coolersky.com/download/hacker/aidance/2005/0805/87.html
       下载安装ethereal
 
http://coolersky.com/download/hacker/sniffer/2005/1227/152.html
    说明:新版本ethereal已经整合winpcap,下载ethereal即可完成安装。
   2、使用
    启动ethereal以后,选择菜单Capature->Start,就OK了。当不想抓的时候,按一下stop, 抓的包就会显示在面板中,并且已经分析好了。
    下面是一个截图:

    (1) ethereal使用-capture选项

    nterface:指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了。
    Limit each packet:限制每个包的大小,缺省情况不限制。
    Capture packets in promiscuous mode:是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。
    Filter:过滤器。只抓取满足过滤规则的包(可暂时略过)。
    File:如果需要将抓到的包写到文件中,在这里输入文件名称。
    use ring buffer:是否使用循环缓冲。缺省情况下不使用,即一直抓包。注意,循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目,文件多大时回卷。
    其他的项选择缺省的就可以了。
    (2)、ethereal的抓包过滤器 
    抓包过滤器用来抓取感兴趣的包,用在抓包过程中。抓包过滤器使用的是libcap过滤器语言,在tcpdump的手册中有详细的解释,基本结构是:[not] primitive [and|or [not] primitive ...]
    个人观点:如果想抓取某些特定的数据包时,可以有以下两种方法,可以任选一种:
      1)在抓包的时候,就先定义好抓包过滤器,这样结果就是只抓到设定好的那些类型的数据包;
      2)先不管三七二十一,把本机收到或者发出的包一股脑的抓下来,然后使用下节介绍的显示过滤器,只让Ethereal 显示那些想要的那些类型的数据包;
    (3)、etheral的显示过滤器(重点内容) 
    在抓包完成以后,显示过滤器可以用来找到你感兴趣的包,可以根据协议、是否存在某个域、域值、域值之间的比较来查找你感兴趣的包。
    举个例子,如果你只想查看使用tcp协议的包,在ethereal窗口的左下角的Filter中输入tcp, 然后回车,ethereal就会只显示tcp 协议的包。如下图所示:

    值比较表达式可以使用下面的操作符来构造显示过滤器自然语言类c 表示举例
 
eq ==
 
ip.addr==10.1.10.20
ne !=
 
ip.addr!=10.1.10.20
gt >
 
frame.pkt_len>10 
lt <
 
lt < frame.pkt_len<10 
ge >=
 
frame.pkt_len>=10 
le <=
 
frame.pkt_len<=10
   表达式组合可以使用下面的逻辑操作符将表达式组合起来自然语言类c 表示举例
 
and &&:逻辑与
 
ip.addr=10.1.10.20&&tcp.flag.fin 
or ||:逻辑或
 
ip.addr=10.1.10.20||ip.addr=10.1.10.21
xor ^^:异或
 
tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == not
!:逻辑非
 
!llc 
    例如:想抓取IP地址是192.168.2.10 的主机,它所接收收或发送的所有的HTTP报文,那么合适的显示Filter (过滤器)就是:

    (4)、在ethereal 使用协议插件 
    ethereal 能够支持许多协议,但有些协议需要安装插件以后才能解,比如H.323,以H.323 协议为例:
     1)首先下载ethereal 的H.323 插件,下载地址http://www.voice2sniff.org/
     2)下载完了以后将文件(h323.dll) 解压到ethereal 安装目录的plugin/0.9.x 目录下面,比如0.9.11。
     3)进行一下设置
 
a、启动ethereal
b、菜单Edit->Preference
c、单击Protocols 前面的"+"号,展开Protocols
d、找到Q931 ,并单击
e、确保"Desegment.... TCP segments" 是选中的(即方框被按下去)
f、单击TCP 
g、确保"Allow....TCP streams" 是选中的
h、确保没有选中"Check....TCP checksum" 和"Use....sequence numbers"
i、单击TPKT
j、确保"Desegment....TCP segments" 是选中的
k、点击Save,然后点击Apply ,然后点击OK
    当然也完全可以不断地重新安装新版本winpcap 和ethreal, 这样就可以不需在旧的ethreal 的版本中安装新的插件来支持新的协议插件,这也是懒人的一种做法。
 

你可能感兴趣的:(windows,网络,tcp,网络协议,工具,protocols)