当前位置: 首页 > 文档资料 > 网络基本功系列 >

细说 tcpdump 的妙用(上)

优质
小牛编辑
128浏览
2023-12-01

介绍

tcpdump命令最初设计用于观察TCP/IP性能问题,它是一个用于截取网络分组,并输出分组内容的工具。tcpdump可以将网络中传送的数据包的报文头完全截获下来提供分析,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and, or, not等逻辑语句来帮助用户去掉无用的信息。

更多信息

使用tcpdump:

Unix命令tee通常用来允许用户查看并记录Unix会话的输出。使用tcpdump结合tee加上-l选项来实现,命令格式如下:

bsd1# tcpdump -l  | tee outfile

另一种方式是通过-w选项直接将抓取数据写入文件中。之后通过tcpdump -r选项来读取。抓取数据可以输入:

bsd1# tcpdump -w rawfile

然后将raw文件转化成text文件:

bsd1# tcpdump -r rawfile   > textfile

tcpdump选项:

tcpdump选项可划分为四大类型:控制tcpdump程序行为,控制数据怎样显示,控制显示什么数据,以及过滤命令。

控制程序行为

这一类命令行选项影响程序行为,包括数据收集的方式。之前已介绍了两个例子:-r和-w。-w选项允许用户将输出重定向到一个文件,之后可通过-r选项将捕获数据显示出来。

如果用户知道需要捕获的报文数量或对于数量有一个上限,可使用-c选项。则当达到该数量时程序自动终止,而无需使用kill命令或Ctrl-C。下例中,收集到100个报文之后tcpdump终止:

bsd1# tcpdump -c100

如果用户在多余一个网络接口上运行tcpdump,用户可以通过-i选项指定接口。在不确定的情况下,可使用ifconfig –a来检查哪一个接口可用及对应哪一个网络。例如,一台机器有两个C级接口,xl0接口IP地址 205.153.63.238,xl1接口IP地址205.153.61.178。要捕捉205.153.61.0网络的数据流,使用以下命令:

bsd1# tcpdump -i xl1

没有指定接口时,tcpdump默认为最低编号接口。

-p选项将网卡接口设置为非混杂模式。这一选项理论上将限制为捕获接口上的正常数据流——来自或发往主机,多播数据,以及广播数据。

-s选项控制数据的截取长度。通常,tcpdump默认为一最大字节数量并只会从单一报文中截取到该数量长度。实际字节数取决于操作系统的设备驱动。通过默认值来截取合适的报文头,而舍弃不必要的报文数据。

如果用户需截取更多数据,通过-s选项来指定字节数。也可以用-s来减少截取字节数。对于少于或等于200字节的报文,以下命令会截取完整报文:bsd1# tcpdump -s200

更长的报文会被缩短为200字节。

控制信息如何显示

-a,-n,-N和-f选项决定了地址信息是如何显示的。-a选项强制将网络地址显示为名称,-n阻止将地址显示为名字,-N阻止将域名转换。-f选项阻止远端名称解析。下例中,从sloan.lander.edu (205.153.63.30) ing远程站点,分别不加选项,-a,-n,-N,-f。(选项-c1限制抓取1个报文)

bsd1# tcpdump -c1 host 192.31.7.130
tcpdump: listening on xl0
14:16:35.897342 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request
bsd1# tcpdump -c1 -a host 192.31.7.130
tcpdump: listening on xl0
14:16:14.567917 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request
bsd1# tcpdump -c1 -n host 192.31.7.130
tcpdump: listening on xl0
14:17:09.737597205.153.63.30>192.31.7.130: icmp: echo request
bsd1# tcpdump -c1 -N host 192.31.7.130
tcpdump: listening on xl0
14:17:28.891045 sloan > cio-sys: icmp: echo request
bsd1# tcpdump -c1 -f host 192.31.7.130
tcpdump: listening on xl0
14:17:49.274907 sloan.lander.edu >192.31.7.130: icmp: echo request

默认为-a选项。

-t和-tt选项控制时间戳的打印。-t选项不显示时间戳而-tt选项显示无格式的时间戳。以下命令显示了tcpdump命令无选项,-t选项,-tt选项的同一报文:

12:36:54.772066 sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)
sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)
934303014.772066 sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)

控制显示什么数据

可以通过-v和-vv选项来打印更多详细信息。例如,-v选项将会打印TTL字段。要显示较少信息,使用-q,或quiet选项。一下为同一报文分别使用-q选项,无选项,-v选项,和-vv选项的输出。

12:36:54.772066 sloan.lander.edu.1174>205.153.63.238.telnet: tcp 0(DF)
12:36:54.772066 sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)
12:36:54.772066 sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)(ttl 128, id 45836)
12:36:54.772066 sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)(ttl 128, id 45836)

-e选项用于显示链路层头信息。上例中-e选项的输出为:

12:36:54.7720660:10:5a:a1:e9:80:10:5a:e3:37:c ip 60:
sloan.lander.edu.1174>205.153.63.238.telnet:. ack 3259091394 win 8647(DF)

05ae9:8是sloan.lander.edu中3Com卡的以太网地址,05a37:c是205.153.63.238中3Com卡的以太网地址。

-x选项将报文以十六进制形式dump出来,排除了链路层报文头。-x和-vv选项报文显示如下:

13:57:12.719718 bsd1.lander.edu.1657>205.153.60.5.domain:11587+ A? www.microsoft.com.(35)(ttl 64, id 41353)
4500003f a189 00004011 c43a cd99 3db2
                         cd99 3c0506790035002b06d92d430100
000100000000000003777777096d6963
726f736f667403636f6d0000010001