首页 > 代码库 > Tcpdump使用方法总结

Tcpdump使用方法总结

1 -- Tcpdump简介

本文跟踪Tcpdump最新版本,不定期更新选项解析和使用方法,截至目前(2014.01.28),Tcpdump的最新版本是:tcpdump4.5.1和libpcap1.5.3。

root@motadou:/home/motadou/apps/tcpdump/sbin# tcpdump -h
tcpdump version 4.5.1
libpcap version 1.5.3
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
               [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
               [ -i interface ] [ -j tstamptype ] [ -M secret ]
               [ -P in|out|inout ]
               [ -r file ] [ -s snaplen ] [ -T type ] [ -V file ] [ -w file ]
               [ -W filecount ] [ -y datalinktype ] [ -z command ]
               [ -Z user ] [ expression ]
2 -- Tcpdump选项函数说明
选项 说明
-a 将网络地址和广播地址转变成名字
-A 以ASCII格式打印出所有分组,并将链路层的头最小化
-c count 指定数据包的监听数量,当收到指定的包数量后,Tcpdump自动退出
-C file_size 在将原始数据包写入文件之前,检查数据文件的大小,如果当前数据文件大于指定的file_size,Tcpdump将关闭当前文件,并重新创建一个编号紧随上个文件编号的新数据文件。该选项需要配合-w选项一起使用。必须注意file_size的单位是百万字节(1000000字节,而不是1048576字节)。
-d 数据包的过滤条件经编译后,将其内部格式代码,以人们能够理解的汇编格式输出
-dd 数据包的过滤条件经编译后,将其内部格式代码,以C语言程序段的格式输出
-ddd 数据包的过滤条件经编译后,将其内部格式代码,以十进制的格式输出
-e 在输出行打印出数据链路层MAC地址等头部信息。该参数可以用来打印以太网或者IEEE 802.11等协议物理链路层的地址。
-n 不将地址(比如:主机地址、端口号)的数字表示形式转换成名字表示。
-s snaplen 从每个报文中截取snaplen字节的数据,而不是缺省的65535。如果我们指定过小的snaplen值,获取的数据报将被截断(亦即我们获得的不是一个完整的数据报,只是原始数据报的一部分),在输出行中会有类似[|proto]这样的输出,这里的proto是截断发生处的协议层名称。注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失。你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了。设置snaplen参数值为0,即是设置为默认值65535。 

如果指定只获取数据报前10个字节,在输出时,会表明该数据包在以太网链路层数据被截断了:
root@motadou:~# tcpdump -i eth0 -n -t -s 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 10 bytes
[|ether]
[|ether]
如果指定只获取数据报前20个字节,在输出时,会表明该数据包在IP层数据被截断了:
root@motadou:~# tcpdump -i eth0 -n -t -s 20
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 20 bytes
IP [|ip] IP [|ip]
-t 在每个输出行都不打印时间戳。 
不使用该参数的输出行如下所示:
root@motadou:~# tcpdump -i eth0 -n
22:47:37.815859 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021826231:1021826427, ack 2432753, win 262, length 196
使用该参数后的输出行如下所示:
root@motadou:~# tcpdump -i eth0 -n -t
IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021826231:1021826427, ack 2432753, win 262, length 196
-tt 在每个输出行打印非格式化的时间戳,格式为:UNIX时间戳.毫秒数 

格式化时间戳的输出行如下所示:
root@motadou:~# tcpdump -i eth0 -n
20:23:59.519824 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021787799:1021787995, ack 2428345, win 254, length 196
20:23:59.520223 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 196, win 3931, length 0
非格式化的时间戳输出行如下所示:
root@motadou:~# tcpdump -i eth0 -tt
1391172027.174475 IP motadou.local.ssh > 192.168.1.101.54931: Flags [P.], seq 1021799219:1021799415, ack 2429125, win 254, length 196
1391172027.174822 IP 192.168.1.101.54931 > motadou.local.ssh: Flags [.], ack 196, win 3944, length 0
-ttt 打印出当前输出行据上次输出所经历的时间间隔,其时间单位是毫秒。输出如下所示:
root@motadou:~# tcpdump -i eth0 -n -ttt
00:00:00.000016 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1256:1372, ack 1, win 254, length 116
00:00:00.000196 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 1060, win 3978, length 0
00:00:00.000090 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 1372, win 3900, length 0
00:00:00.037288 IP 192.168.1.1.2049 > 239.255.255.250.1900: UDP, length 327
3 -- Tcpdump过滤表达式说明
4 -- Tcpdump使用示例

建立连接的过程 
客户端主动关闭的情况/服务端主动关闭的情况(注意各端的链接状态) 
accept返回前连接夭折 
服务器进程终止,客户端再发送数据的状态 
服务器主机崩溃 
服务器主机关机

Tcpdump使用方法总结