借助sniffer诊断Linux网络故障
2009-09-27 10:12 htc开发 阅读(309) 评论(0) 编辑 收藏 举报
嗅探器(sniffer)在网络安全领域是一把双刃剑,一方面常被黑客作为网络攻击工具,从 而造成密码被盗、敏感数据被窃等安全事件;另一方面又在协助网络管理员监测网络状况、诊断网络故障、排除网络隐患等方面有着不可替代的作用。嗅探器是企业 必不可少的网络管理工具。本文以Linux平台下三个常用的网络嗅探器Tcpdump、Ethereal和EtherApe为例,介绍如何借助 sniffer来诊断网络故障,从而保障网络高效安全地运行。
简介
嗅探器(sniffer)又称为包嗅探器,是用来截获计算机网络通信数据的软件或硬 件。与电话电路不同,计算机网络是共享通信通道的,从而意味着每台计算机都可能接收到发送给其它计算机的信息,捕获在网络中传输的数据信息通常被称为监听 (sniffing)。嗅探器常常作为一种收集网络中特定数据的有效方法,是利用计算机的网络接口截获目的地为其它计算机数据报文的一种工具。
嗅探器工作在网络环境中的底层,可以拦截所有正在网络上传送的数据,从而成为网络安全的一个巨大威胁。通过对网络进行嗅探,一些恶意用户能够很容易地窃取到绝密文档和敏感数据,因此嗅探器经常被黑客当作网络攻击的一种基本手段。
任何工具都有弊有利,嗅探器既可以作为黑客获得非法数据的手段,但同时对网络管理员 来讲又是致关重要的。通过嗅探器,管理员可以诊断出网络中大量的不可见模糊问题。这些问题通常会涉及到多台计算机之间的异常通信,而且可能会牵涉到多种通 信协议。借助嗅探器,管理员还可以很方便地确定出哪些通信量属于某个特定的网络协议、占主要通信量的主机是哪台、各次通讯的目标是哪台主机、报文发送占用 多少时间、各主机间报文传递的间隔时间等。这些信息为管理员判断网络问题及优化网络性能,提供了十分宝贵的信息。
作为一种发展比较成熟的技术,嗅探器在协助监测网络数据传输、排除网络故障等方 面有着不可替代的作用,倍受网络管理员的青睐。可以通过分析网络流量来确定网络上存在的各种问题,如瓶颈效应或性能下降;也可以用来判断是否有黑客正在攻 击网络系统。如果怀疑网络正在遭受攻击,通过嗅探器截获的数据包可以确定正在攻击系统的是什么类型的数据包,以及它们的源头,从而可以及时地做出响应,或 者对网络进行相应的调整,以保证网络运行的效率和安全。
网络管理员在检测网络故障及维护网络正常通信的过程中,经常需要借助嗅探器提供的某些功能。一般的嗅探器都提供以下一些功能:
1. 自动从网络中过滤及转换有用的信息;
2. 将截获的数据包转换成易于识别的格式;
3. 对网络环境中的通讯失败进行分析;
4. 探测网络环境下的通讯瓶颈;
5. 检测是否有黑客正在攻击网络系统,以阻止其入侵;
6. 记录网络通信过程。
本文介绍如何在Linux平台下利用嗅探器来截获在网络中传递的数据信息,从而检测 出是否存在网络瓶颈,以及可能存在的网络故障。在Linux平台下可用的嗅探器非常多,各自的功能和长处也不尽相同,本文主要以Tcpdump、 Ethereal和EtherApe三种嗅探器为例,讲述如何利用各自的优点来对Linux网络的性能和故障进行系统的分析和检测。
◆ Tcpdump
Tcpdump是一个命令行方式的网络流量监测工具。它诞生的时间较早,是许多图形化嗅探器的雏形。
◆ Ethereal
Ethereal是一个图形化的网络流量监测工具,比命令行方式的Tcpdump友好很多,可以实时地观看捕获过程。
◆ EtherApe
EtherApe也是一个图形化的网络流量监测工具。与Ethereal不同,EtherApe可以通过对主机间的连接进行检测,图形化地显示网络活动,因而能更加直观地显示出整个网络所处的状态。
sniffer工作原理
在基于TCP/IP协议的局域网中,当数据由应用层自上而下传递时,首先在网络层形 成IP数据包,然后再向下到达数据链路层,由数据链路层将IP数据包分割为数据帧,加上以太网包头后向下发送到物理媒体上。以太网包头中包含着本地主机和 目标主机的MAC地址,位于链路层的数据帧是依靠48位的MAC地址而非IP地址来寻址的,网络接口卡的驱动程序不会关心IP数据包的目的IP地址。它所 需要的仅仅是数据包中的MAC地址。
当局域网内的主机都通过集线器(HUB)等方式连接时,一般采用的是共享式的连 接。这种共享式的连接有一个很明显的特点:发送数据时物理上采用的是广播方式。当一台主机向另一台主机发送数据时,共享式的HUB会将接收到的所有数据向 HUB上的每个端口转发。也就是说,当主机根据MAC地址发送数据包时,尽管发送端主机告知目标主机的地址,但并不意味着一个网络内的其它主机不能监听到 发送端和接收端之间传递的数据。因此从理论上说,当采用共享式连接时,位于同一网段的每台主机都可以截获在网络中传输的所有数据。
正常情况下,局域网内同一网段的所有网卡虽然都具有访问在物理媒体上传输的所有数据的能力,但通常一个网卡只响应以下两种数据帧:
◆ 数据帧的目标MAC地址与网卡自身的MAC地址一致;
◆ 数据帧的目标MAC地址为广播地址。
只有当接收到上面两种类型的数据帧时,网卡才会通过CPU产生一个硬件中断,然后再由操作系统负责处理该中断,对帧中所包含的数据做进一步处理。也就是说,虽然网络上所有主机都可以“监听”到所有的数据,但对不属于自己的报文不予响应,只是简单地忽略掉这些数据。
但是,如果网络中的某台主机不愿意忽略掉不属于自己的数据帧,只需将网卡设置为混杂 (Promiscuous)模式,对接收到的每一个帧都产生一个硬件中断,以提醒操作系统处理经过该网卡的每一个数据包,这样网卡就可以捕获网络上所有的 数据了。如果一台主机的网卡被配置为混杂模式,那么该主机及其相关的软件就构成了一个嗅探器。
嗅探器工作在网络环境中的底层,它会拦截所有正在网络上传送的数据,通过借助相应的软件进行处理。嗅探器可以实时分析这些数据的内容,进而可以帮助网络管理员分析整个网络的状态、性能或故障。正因如此,在检测网络故障时,嗅探器对管理员来说是一种不可或缺的强力工具。
用Tcpdump过滤数据包
对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降 的时候,可以通过嗅探器来分析原因,找出造成网络阻塞的根源。Tcpdump就是Linux平台下一个以命令行方式运行的网络流量监测工具。它能截获网卡 上收到的数据包,并能够协助网络管理员对其中的内容进行相应的分析。
嗅探器能够截获指定接口或所有接口的数据包,这取决于如何对嗅探器进行配置。缺 省情况下嗅探器一般会显示所有从网络上截获的数据包,但通常会因为数据量过大而使网络管理员理不清头绪。因此,嗅探器一般都提供有相应的机制来对截获的数 据包进行过滤,从而只显示符合特定要求的数据包。Tcpdump提供了一整套完善的规则来对截获的数据包进行过滤,由于大多数图形化的嗅探器都使用类似的 过滤机制,因此对Linux网络管理员来说,了解如何使用Tcpdump来捕获感兴趣的数据包是一项必须掌握的基本功。
Tcpdump的安装
在一些Linux发行版中,Tcpdump通常作为标准的软件包被默认安装,执行 “tcpdump”命令可以确定是否已经安装了Tcpdump。如果系统中还没有安装Tcpdump,可以去 “http://www.tcpdump.org”下载最新的Tcpdump源码包。下面以Tcpdump 3.7.1为例,讲述如何安装Tcpdump,此处使用的操作系统是Red Hat 8.0。
首先下载最新的源码包,并将其解压缩,命令如下:
# cp tcpdump-3.7.1.tar.gz /usr/local/src/ |
在编译Tcpdump之前,应先确定pcap库(libpcap)已经安装完毕。这个库是编译Tcpdump时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Tcpdump:
# cd tcpdump-3.7.1 |
Tcpdump的命令行选项
Tcpdump是一个命令行方式的网络嗅探器。它通过使用命令选项来过滤网卡截获的数据包,如果不进行过滤,过多数量的包会使网络管理员很难理清头绪。Tcpdump的命令格式如下:
tcpdump [ -adeflnNOpqRStuvxX ] [ -c 数量 ] [ -C 文件尺寸 ] [ -F 文件名 ] [ -i 网络接口 ] [ -m 文件名 ] [ -r 文件名 ] [ -s 长度 ] [ -T 类型 ] [ -w 文件名 ] [ -E algo:secret ] [ 表达式 ]
表1 Tcpdump常用命令行选项
-a | 将网络地址和广播地址转变成容易识别的名字 |
-d | 将已截获的数据包的代码以人容易理解的格式输出; |
-dd | 将已截获的数据包的代码以C程序的格式输出; |
-ddd | 将已截获的数据包的代码以十进制格式输出; |
-e | 输出数据链路层的头部信息; |
-f | 将internet地址以数字形式输出; |
-l | 将标准输出变为行缓冲方式; |
-n | 不将网络地址转换成易识别的主机名,只以数字形式列出主机地址(如IP地址),这样可以避免DNS查询; |
-t | 不输出时间戳; |
-v | 输出较详细的信息,例如IP包中的TTL和服务类型信息; |
-vv | 输出详尽的报文信息; |
-c | 在捕获指定个数的数据包后退出; |
-F | 从指定的文件中读取过滤规则,忽略命令行中指定的其它过滤规则; |
-i | 指定监听的网络接口; |
-r | 从指定的文件中读取数据包(该文件一般通过-w选项产生); |
-w | 将截获的数据包直接写入指定的文件中,不对其进行分析和输出; |
-T | 将截获的数据包直接解释为指定类型的报文,目前支持的类型有cnfp、rpc、rtp、snmp、vat和wb。 |
表1给出了一些常用的Tcpdump命令行选项,使用这些选项可以过滤出真正感兴趣的数据包。
使用Tcpdump的命令行选项可以很方便地过滤出需要的数据包。例如,要过滤掉所 有除ARP请求和应答的通信数据,可以输入“tcpdump arp”命令。该命令只对ARP的请求和应答信息进行截获,在Tcpdump的输出信息中,请求是“arp who-has”这样的条目,而应答则是“arp reply”这样的条目,如图1所示。
图1 ARP过滤
如果要做更多的处理,比如从指定的网络接口截获5个ARP数据包,并且不将网络地址转换成主机名,则可以用命令“tcpdump arp -i eth0 -c 5 -n”。
Tcpdump的过滤表达式
Tcpdump的过滤表达式是一个正则表达式,Tcpdump利用其作为过滤数据包 的条件。如果一个数据包满足表达式的条件,则这个数据据包将会被捕获;如果不指定表达式,则在网络上任何两台主机间的所有数据包都将被截获。过滤表达式的 作用就是使Tcpdump只输出网络管理员所需要的数据,如一个指定的网络接口和特定主机间的IP数据包。
Tcpdump的过滤表达式中一般有如下几种类型的关键字:
◆ 类型关键字
这类关键字用于指定主机、网络或端口,包括host、net和port三个关键字。 例如,可以用“host 9.185.10.57”来标明监听的主机;用“net 9.185.0.0”来标明监听的网络;用“port 23”来标明监听的端口。如果没有在表达式中指明类型,则缺省的类型为host。
◆ 方向关键字
这类关键字用于指定截获的方向,包括dst、src、dst or src、dst and src四个关键字。例如,可以用src 9.185.10.57来指明截获的数据包中的源主机地址;用“dst net 9.185.0.0”来指明截获的数据包中的目标网络地址。如果没有在表达式中指明方向,则缺省的方向为“dst or src”,即两个方向的数据包都将被捕获。对于数据链路层协议(如SLIP和PPP),使用inbound和outbound来定义方向。
◆ 协议关键字
这类关键字用于指定要截获的数据包所属的协议,包括ether、fddi、tr、 ip、ip6、arp、rarp、decnet、tcp和udp等关键字。关键字fddi指明在FDDI(分布式光纤数据接口网络)上的特定网络协议。实 际上它是ether的别名。fddi和ether具有类似的源地址和目标地址,所以可以将fddi协议包当作ether的包进行分析和处理。其它几个关键 字只是指定了所要截获的协议数据包。如果没有在表达式中指明协议,则Tcpdump会截获所有协议的数据包。
除了上述三种类型的关键字外,Tcpdump的过滤表达式中还可以指定的一些重 要关键字包括gateway、broadcast、multicast、less、greater。这些关键字对于监听网络中的广播和多播很有帮助。关于 这些关键字的更多信息和用法请参考Tcpdump的man手册。
在Tcpdump的过滤表达式中,各类关键字之间还可以通过布尔运算符来构成组 合表达式,以满足实际运用时的需要。布尔运算符包括取非运算符(not或!)、与运算符(and或&&)、或运算符(or或||),使用 布尔运算符可以将表达式组合起来构成强大的组合条件,从而能够对Tcpdump的过滤器做进一步细化。
下面给出几个使用Tcpdump过滤数据包的例子,嗅探器提供的过滤表达式对于管理员监测网络运行状况非常重要:
1. 如果想要截获主机“9.185.10.57”所有收到和发出的数据包,可以使用如下命令:
# tcpdump host 9.185.10.57 |
2. 如果想要截获在主机“9.185.10.57”和主机“9.185.10.58”或“9.185.10.59”之间传递的数据包,可以使用如下命令:
# tcpdump host 9.185.10.57 and / |
需要注意的是,在使用布尔运算符构成组合表达式时,有时需要使用括号来表达复杂的逻辑关系。如果要在命令行中使用括号,一定要用转义字符(“/”)对括号进行转义,否则命令行解释器将给出语法错误的提示。
3. 如果想要截获主机“9.185.10.57”和除主机“9.186.10.58”外所有其它主机之间通信的IP数据包,可以使用如下命令:
# tcpdump ip host 9.185.10.57 and ! 9.185.10.58 |
4. 如果想要截获主机“9.185.10.57”接收或发出的FTP(端口号为21)数据包,可以使用如下命令:
# tcpdump tcp port 21 host 9.185.10.57 |
5. 如果怀疑系统正受到拒绝服务(DoS)攻击,网络管理员可以通过截获发往本机的所有ICMP包,来确定目前是否有大量的ping指令流向服务器,此时就可以使用下面的命令:
# tcpdump icmp -n -i eth0 |
Tcpdump的输出结果
在对网络中的数据包进行过滤后,Tcpdump的输出结果中包含网络管理员关心的网络状态信息。由于Tcpdump只是一个命令行方式的嗅探器,因而其输出结果不是很直观,下面以几种典型的输出信息为例,介绍如何对Tcpdump的输出结果进行分析。
1. 数据链路层头信息
使用“tcpdump -e host tiger”命令截获主机“tiger”所有发出和收到的数据包,并在输出结果中包含数据链路层的头部信息。
“tiger”是一台装有Linux的主机,其MAC地址是00:D0:59:BF:DA:06;“mag”是一台装有SCO Unix的工作站,其MAC地址是08:90:B0:2F:AF:46,上述命令的输出结果如下:
20:15:20.735429 eth0 |
在输出的信息中,“20:15:20”为截获数据包的时间,“735429”是毫秒 数,“eth0 <”表示从网络接口eth0接收该数据包(若为“eth0 >”,则表示从网络接口eth0发送数据包)。“08:90:b0:2f:af:46”是主机mag的MAC地址,指明发送该数据包的源主机为 “mag”,“00:d0:59:bf:da:06”是主机tiger的MAC地址,指明该数据包发送的目标主机为“tiger”。“ip”表明该数据包 是IP数据包,“60”是数据包的长度,“mag.36579 > tiger.ftp”表明该数据包是从主机“mag”的36579端口发往主机“tiger”的FTP(21)端口。“ack 25565”表示对序列号为25565的包进行确认,“win 8970”则指明发送窗口的大小为8760。
2. ARP包的输出信息
若使用“tcpdump arp -c 2”命令截获ARP数据包,得到的输出结果可能是:
20:42:22.713502 eth0 |
在输出的信息中,“20:42:22”为截获数据包的时间;“713502”和 “713907”为毫秒数;“eth0 >”表明从主机发出该数据包;“eth0 <”表明从主机接收该数据包。“arp”表明该数据包是ARP请求,“who-has mag tell tiger”表明是主机“tiger”请求主机“mag”的MAC地址,“00:d0:59:bf:da:06”是主机“tiger”的MAC地址。 “reply mag is-at”表明主机“mag”响应“tiger”的ARP请求,“08:90:b0:2f:af:46”是主机“mag”的MAC地址。
3. TCP包的输出信息
用Tcpdump截获的TCP包的一般输出格式如下:
src > dst: flags data-sequno ack window urgent options |
“src > dst:”标明从源地址到目的地址;flags是TCP包中的标志信息,包括S(SYN)标志、F(FIN)标志、P(PUSH)标志、R(RST)标志 和“.”(没有标志);data-sequno是数据包中的数据序列号;ack是下次期望的数据序列号;window是接收缓存的窗口大小;urgent 标明数据包中是否有紧急指针;options是可能的选项值。
4. UDP包的输出信息
用Tcpdump截获的UDP包的一般输出格式如下:
src.port1 > dst.port2: udp lenth |
UDP中包含的信息很简单。上面的输出结果表明从主机“src”的“port1”端口发出的一个UDP数据包被送到主机“dst”的“port2”端口,数据包的类型是UDP,其长度为“lenth”。
通过上面的介绍可以知道,Tcpdump是一个命令行方式的嗅探器。它可以根据需要 显示出经过一个网络接口的所有数据包,供网络管理员对网络进行检测。但由于采用的是命令行方式,对这些数据包的分析可能会比较困难。利用Tcpdump提 供的表达式过滤一些截获的数据包,可以从截获的大量数据包中提取出有用的信息,从而能够有针对性地对网络进行监测。
由于所有网络嗅探器的原理都大体相似,因而Tcpdump的基本知识可以应用于 几乎所有的嗅探器。Tcpdump是基于命令行方式的嗅探器,其输出结果比较难于分析,因此很多网络管理员都使用图形化的嗅探器来检测网络故障,并处理可 能存在的安全问题。下次将介绍两个图形化的网络嗅探器—Ethereal和EhterApe。同Tcpdump相比,使用这两个嗅探器的分析过程要简单许 多。
上次介绍了嗅探器的基本原理,以及如何用Tcpdump来截获网络上的数据包。但 Tcpdump只是一个命令行方式下的网络嗅探器,虽然功能强大,可分析起数据包来却不是很方便。好在Linux下还有一些具有良好GUI界面的嗅探器可 以借助。Ethereal和EtherApe就是其中的佼佼者。有了Tcpdump的基础,再使用这两个嗅探器就感觉很轻松。
用Ethereal分析协议数据包
Ethereal是一个图形用户接口(GUI)的网络嗅探器,能够完成与 Tcpdump相同的功能,但操作界面要友好很多。Ehtereal和Tcpdump都依赖于pcap库(libpcap),因此两者在许多方面非常相似 (如都使用相同的过滤规则和关键字)。Ethereal和其它图形化的网络嗅探器都使用相同的界面模式,如果能熟练地使用Ethereal,那么其它图形 用户界面的嗅探器基本都可以操作。
Ethereal的安装
在http://www.ethereal.com网站上可以下载到最新的Ethereal源码包。下面以Ethereal 0.9.9为例,讲述如何安装Ethereal,此处使用的操作系统是Red Hat 8.0。
首先下载最新的源码包,并将其解压缩:
# cp ethereal-0.9.9.tar.bz2 /usr/local/src/ |
同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Ethereal时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Ethereal:
# cd ethereal-0.9.9 |
设置Ethereal的过滤规则
当编译并安装好Ethereal后,就可以执行“ethereal”命令来启动 Ethereal。在用Ethereal截获数据包之前,应该为其设置相应的过滤规则,可以只捕获感兴趣的数据包。Ethereal使用与Tcpdump 相似的过滤规则,并且可以很方便地存储已经设置好的过滤规则。要为Ethereal配置过滤规则,首先单击“Edit”选单,然后选择“Capture Filters...”菜单项,打开“Edit Capture Filter List”对话框(如图1所示)。因为此时还没有添加任何过滤规则,因而该对话框右侧的列表框是空的。
图1 Ethereal过滤器配置对话框
在Ethereal中添加过滤器时,需要为该过滤器指定名字及规则。例如,要在主机 10.1.197.162和www.sohu.com间创建过滤器,可以在“Filter name”编辑框内输入过滤器名字“sohu”,在“Filter string”编辑框内输入过滤规则“host 10.1.197.162 and www.sohu.com”,然后单击“New”按钮即可,如图2所示。
图2 为Ethereal添加一个过滤器
在Ethereal中使用的过滤规则和Tcpdump几乎完全一致,这是因为两者都基于 pcap库的缘故。Ethereal能够同时维护很多个过滤器。网络管理员可以根据实际需要选用不同的过滤器,这在很多情况下是非常有用的。例如,一个过 滤器可能用于截获两个主机间的数据包,而另一个则可能用于截获ICMP包来诊断网络故障。
当所有需要的过滤器都创建好后,单击“Save”按钮保存创建的过滤器,然后单 击“Close”按钮来关闭“Edit Capture Filter List”对话框。要将过滤器应用于嗅探过程,需要在截获数据包之前或之后指定过滤器。要为嗅探过程指定过滤器,并开始截获数据包,可以单击 “Capture”选单,选择“Start...”选单项,打开“Capture Options”对话框,单击该对话框中的“Filter:”按钮,然后选择要使用的过滤器,如图3所示。
图3 为Ethereal指定过滤器
注意在“Capture Options”对话框中,“Update list of packets in real time”复选框被选中了。这样可以使每个数据包在被截获时就实时显示出来,而不是在嗅探过程结束之后才显示所有截获的数据包。
在选择了所需要的过滤器后,单击“OK”按钮,整个嗅探过程就开始了。Ethereal可以实时显示截获的数据包,因此能够帮助网络管理员及时了解网络的运行状况,从而使其对网络性能和流量能有一个比较准确的把握。
用Ethereal分析数据包
Ethereal和其它的图形化嗅探器使用基本类似的界面,整个窗口被分成三个部 分:最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据 包内容,用来显示数据包在物理层上传输时的最终形式。
使用Ethereal可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。图4是在Ethereal中对一个HTTP数据包进行分析时的情形。
在图3最上边的数据包列表中,显示了被截获的数据包的基本信息。从图中可以看出,当 前选中数据包的源地址是10.1.197.162,目的地址为61.135.150.65,该数据包所属的协议是超文本传输协议(HTTP)。更详细的信 息表明该数据包中含有一个HTTP的GET命令,要求下载starrtlog.js文件到客户端的Web浏览器。
图4 用Ethereal分析数据包内容
图4中间是协议树,通过协议树可以得到被截获的数据包的更多信息,如主机的MAC地址 (Ethernet II)、IP地址(Internet Protocol)、TCP端口号(Transmission Control Protocol),以及HTTP协议的具体内容(Hypertext Trnasfer Protocol)。通过扩展协议树中的相应节点,可以得到该数据包中携带的更详尽的信息。
图4最下边是以十六制显示的数据包的具体内容,这是被截获的数据包在物理媒体上传输时的最终形式,当在协议树中选中某行时,与其对应的十六进制代码同样会被选中,这样就可以很方便地对各种协议的数据包进行分析。
Ethereal提供的图形化用户界面非常友好,管理员可以很方便地查看到每个数据包的详细信息,协议树及其对应的十六进制表示对分析每个数据包的目的很有帮助,综合使用Ethereal和Tcpdump能够基本满足网络管理员在Linux系统上的所有嗅探要示。
用EtherApe查看网络流量
EtherApe也是一个图形化的网络嗅探器。与Ehtereal不 同,EtherApe通过验证主机与主机之间的链接,图形化地显示网络目前所处的状态。EtherApe使用不同颜色的连线来表示位于不同主机之间的连 接,而连线的粗细则表明主机间数据流量的大小。这些信息都是实时变化的,因而能够协助管理员随时了解到网络中各部分流量的变化情况。
EtherApe的安装
EhterApe支持Ethernet、FDDI和Token Ring等多种网络,能够实时地从网络或文件中读取网络流量的变化情况。此外它还可以将网络流量信息保存下来,以便在之后需要时再显示出来。在 http://www.sourceforge.net/projects/etherape/网站上可以下载到最新的EtherApe源码包。下面以 Ethereal 0.8.2为例,讲述如何安装EtherApe(使用的操作系统是RedHat 8.0)。
首先下载最新的源码包并将其解压缩,代码如下:
# cp etherape-0.8.2.tar.gz /usr/local/src/ |
EtherApe使用的是GNOME这一图形用户接口库。与Ethereal和 Tcpdump一样,它也使用pcap库(libpcap)对网络上传输的数据包进行截获和过滤。在编译EtherApe之前,应先确定所需的这些库已经 安装好,因为这是编译EtherApe时所必需的。如果这些库已经安装,就可以执行下面的命令来编译并安装EtherApe:
# cd etherape-0.8.2 |
用EtherApe分析网络流量
当编译并安装好EtherApe后,就可以执行“etherape”命令来启动EtherApe。
当用EtherApe截获在网络上传输的数据包时,也需要先为其指定过滤规则,否则 EthreApe将捕获网络中的所有数据包。单击工具栏上的“Pref.”按钮,打开“Preferences”对话框,在该对话框中的 “Capture”属性页中,可以找到用于设置过滤规则的“Capture filter”下拉框。由于采用的都是pcap库,因此EtherApe过滤规则的设置与Tcpdump和Ethereal是相同的。
设置好过滤规则后,单击工具栏上的“Start”按钮,就可以开始对网络中感兴趣的数据包进行嗅探。EhterApe图形化地显示网络流量,图5是当EtherApe处于Ethernet模式下时的网络流量图。
图5 EtherApe监测的Ethernet流量图
EtherApe提供了Token Ring、FDDI、Ethernet、IP和TCP五种监听模式。当处于Ethernet模式下时,EtherApe会截获所有符合过滤规则的以太网数 据包,但有时网络管理员可能只对IP数据包感兴趣,这时可以将EtherApe切换到IP模式。单击“Capture”菜单,选择“Mode”菜单项,然 后再选择相应的模式,就可以完成模式之间的切换。图6是当EhterApe处于IP模式下时的网络流量图。
图6 EtherApe监测的IP流量图
EtherApe能够以图形的方式显示网络流量。用户看到的是一个很直观的用于表示网络上各主机间流量大小的图,而不是单个的数据包,因而更容易从整体上把握整个网络的运行状况,在定位网络故障时相对来说也变得更加容易。