当前位置:文档之家› wireshark

wireshark

特别企划

Special Feature 网络流量捕捉:图形化工具Wireshark

Ethereal是一个开放源码的网络分析系统,也是目前最好的开放源码的网络协议分析器,支持Linux和Windows平台。

Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能,完全可以与

商业的网络分析系统媲美。自从1998年发布最早的0.2版本至今,大量的志愿者为Ethereal 添加新的协议解析器,如今Ethereal已经支持五百多种协议解析。

另外,网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在网络分析系统模块的最底层,作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

自E t h e r e a l 的作者Gerald Coombs宣布离开NIS 的消息后,E t h e r e a l 改名为Wireshark。

在L i n u x 系统中,1992年Lawrence Berkeley Lab 的S t e v e n M c C a n n e 和V a n Jacobson提出了包过滤器的一种实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库,现有的大部分Linux捕包系统都是基于这套函数库,或者是在它的基础上做一些针对性的改进。

在W i n d o w s 系统中,意大利人F u l v i o R i s s o 和Loris Degioanni提出并实现了W i n p c a p 函数库,作者称之为N P F 。由于N P F 的主要思想就是来源于BPF,它的设计目标就是为W i n d o w s 系统提供一个功能强大的开发式数据包捕获平台,希望在Linux 系统中的网络分析工具经过简单编译以后,也可以移植到W i n d o w s 中,因此这两种捕包架构是非常现实的。就实现来说,提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采

用L i b p c a p 函数库抓包,在W i n d o w s 系统中采用Winpcap函数库抓包。

层次化的数据包协议分析方法

取得捕包函数捕回的数

据包后,就需要进行协议分析和协议还原的工作了。由于OSI 的七层协议模型,协议数据是从上到下封装后发送的,对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原,然后脱去网络层协议头,将里面的数据交给传输层分析,这样一直进行下去,直到应用层。

由于网络协议种类很多,就Ethereal所识别的五百多种协议来说,为了使协议和协议间层次关系明显,从而对数据流里的各个层次的协议能够逐层处理,Ethereal系统采用了协议树的方式。

图1是一个简单的协议树,如果协议A的所有数据都是封装在协议B里的,那么,这个协议A就是协议B另外一个协议的儿子节点。我们将最低层的无结构数据流作为根节点,那么具有相同父节点的协议成为兄弟节点。

这些拥有同样父协议兄弟节点的协议如何互相区分呢?Ethereal系统采用协议的特征字来识别,每个协议会注册自己的特征字,这些特征字给自己的子节点协议提供可以互相区分开来的标识。

图1 协议树简单示意

户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。安装该软件,可以按照如下步骤进行操作。

//将下载的最新版本软件拷贝到临时文件夹

# cp wireshark-1.0.3. tar.gz/usr/local/src/

//切换到临时文件夹目录# cd /usr/local/src///解压缩文件

# tar -xvf wireshark -1.0.3.tar.gz

另外,同T c p d u m p 一

样,在编译E t h e r e a l 之前,首先要确定已经安装了Pcap库(Libpcap),这是编译Wireshark时所必需的。如果该库已经安装好,就可以执行下面的

命令,来进行编译并安装Wireshark了:

# c d w i r e s h a r k - 1.0.3

# ./configure # make # make install 当编译并安装好Wireshark后,就可以执行“Wireshark”命令来启动

Wireshark了。

比如,TCP协议的Port字段注册后,TCP.Port=21就可以认为是TCP协议,特征字可以是协议规范定义的任何一个字段。比如,IP协议就可以定义Proto字段为一个特征字。

在Ethereal中注册一个协议解析器,首先要指出它的父协议是什么。另外,还要指出自己区别于父节点下的兄弟节点协议的特征。

比如F T P 协议,在Ethereal中它的父节点是TCP 协议,它的特征就是TCP协议的Port字段为21。这样,当一个端口为21的T C P 数据流来到时,首先由TCP协议注册的解析模块处理,处理完之后,通过查找协议树找到自己协议下面的子协议,判断应该由哪个子协议来执行,找到正确的子协议后,就转交给F T P 注册的解析模块处理。这样,由根节点开始一层一层地解析下去。

由于采用了协议树加特征字的设计,这个系统在协议解析上有了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

基于插件技术的协议分析器

所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。

运用插件技术,可以

开发出伸缩性良好、便于维护的应用程序,著名的应用实例有:媒体播放器Winamp、微软的网络浏览器IE等。

由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样,如果需要对一个新的协议分析,只需要编写这个协议分析器,并调用注册函数在系统注册就可以使用了。通过增加插件,使程序有很强的可扩展性,各个功能模块内聚。

安装Wireshark

Wireshark可以在http://w w w.w i r e s h a r

k.o r g

/download.html下载得到,该软件具有极其方便和友好的图形用户界面,并且能够使得用

图2 Wireshark 的捕包界面

图3 Wireshark 捕包选项设置示意图

特别企划

Special Feature 使用Wireshark

1.抓包选项

抓包是进行协议分析的第一步,在Wireshark中,有几个抓包的相关选项需要尤其注意(如图2和3所示)。

(1)Interface:指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了。

Limit Each Packet: 限制每个包的大小,缺省情况不限制。

(2)Capture Packets in Promiscuous Mode:确

定是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下,我们只需要监听本机收到或者发出的数据包,因此,应该关闭这个选项。

(3)Filter:过滤器,只抓取满足过滤规则的数据包。

(4)File:如果需要将抓到的包写到文件中,在这里输入文件名称。

Use Ring Buffer:是否使用循环缓冲。缺省情况下不使用,即一直抓包。

注意:循环缓冲只有

2.协议过滤(Filter)选项

由于网络中的协议五花八门,H T T P 、F T P 、A R P 、ICMP协议等都在抓包的范围之列,因而给协议分析工作带来

了一些麻烦。为了对特定的协议进行分析统计,可以使用Ehereal提供的Filter选项对数据报文进行过滤,对特定的协议进行提取,再进行分析。

图4给出了使用Capture菜单下的Capture Filter选项进行过滤设置的

示意,该软件已经提供了许多协议的Filter供用户选择使用,而用户也可以自行添加。图5则显示了通过在工具栏的Filter编辑框内输入协议名称对已捕捉的包进行过滤的结果,图中显示了过滤后所得HTTP协议的数据包情况。用户也可以通过输入FTP、ARP

或者TCP等字段来获取相应的协议内容。

注意:图4和图5所示的设置方法不同之处在于:前者设置后,该工具只对选取的协议进行捕包;而后者则是在所有捕获的数据包中(包括各种协议)选择用户设定的协议进行提取和显示。

3.统计选项(Statistics)

统计选项用于对过滤后的各协议类型进行统计,从而从宏观上对网络中的流量进行统计分析和全局把握。图6是统计选项菜单使用情况示意,图7为根据不同协议进行统计的结果示意。

图5 协议过滤中显示特定协议数据包示意

图7 Wireshark 根据不同协议的统计结果示意图4 协议过滤中Capture Filter 选项示意

图6 Wireshark 统计选项菜单使用示意

在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目、文件多大时回卷。其他的选项,选择缺省值就可以了。

相关主题
文本预览
相关文档 最新文档