网络基本功(十七):细说tcpdump的妙用(上)

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

    使用tcpdump:

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

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

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

    1. bsd1# tcpdump -r rawfile > textfile

    tcpdump选项:

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

    控制程序行为

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

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

    1. bsd1# tcpdump -i xl1

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

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

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

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

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

    控制信息如何显示

    1. bsd1# tcpdump -c1 host 192.31.7.130
    2. tcpdump: listening on xl0
    3. bsd1# tcpdump -c1 -a host 192.31.7.130
    4. tcpdump: listening on xl0
    5. bsd1# tcpdump -c1 -n host 192.31.7.130
    6. tcpdump: listening on xl0
    7. 14:17:09.737597 205.153.63.30 > 192.31.7.130: icmp: echo request
    8. bsd1# tcpdump -c1 -N host 192.31.7.130
    9. tcpdump: listening on xl0
    10. bsd1# tcpdump -c1 -f host 192.31.7.130
    11. 14:17:49.274907 sloan.lander.edu > 192.31.7.130: icmp: echo request

    默认为-a选项。

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

    控制显示什么数据

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

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

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

    1. 12:36:54.772066 0:10:5a:a1:e9:8 0:10:5a:e3:37:c ip 60:

    05a:a1:e9:8是sloan.lander.edu中3Com卡的以太网地址,05a:e3:37:c是205.153.63.238中3Com卡的以太网地址。

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

    (未完待续)