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/
# cd /usr/local/src/
# tar xzvf tcpdump-3.7.1.tar.gz



在编译Tcpdump之前,应先确定pcap库(libpcap)已安装完毕。这个库是编译Tcpdump时所必需的。假如该库已安装,就能够执行下面的命令来编译并安装Tcpdump:

# cd tcpdump-3.7.1
# ./configure
# make
# make install



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手册。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!