Damian Lau

Tcpdump使用简介

tcpdump

tcpdump会分成选项过滤表达式输出信息三部分

tcpdump -i eth0 -nn -X 'port 53' -c 1

是interface的含义,是指我们有义务告诉tcpdump希望他去监听哪一个网卡。这在我们一台服务器有多块网卡时很有必要。

意思是说当tcpdump遇到协议号或端口号时,不要将这些号码转换成对应的协议名称或端口名称。比如,众所周知21端口是FTP端口,我们希望显示21,而非tcpdump自作聪明的将它显示成FTP。

告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。

这是告诉tcpdump不要看到啥就显示啥。我们只关心源端口或目的端口是53的数据包,其他的数据包别给我显示出来。

是Count的含义,这设置了我们希望tcpdump帮我们抓几个包。我设置的是1,所以tcpdump不会帮我再多抓哪怕一个包回来。

【-e选项】- 增加以太网帧头部信息输出

【-l选项】- 使得输出变为行缓冲

Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲方式。标准错误是不带缓冲的,终端设备常为行缓冲,而其他情况默认都是全缓冲的。

【-t选项】- 输出时不打印时间戳

【-v选项】- 输出更详细的信息

【-F选项】- 指定过滤表达式所在的文件

【-w选项】- 将流量保存到文件中

【-r选项】- 读取raw packets文件

过滤表达式大体可以分成三种过滤条件,”类型”、”方向”和”协议”,这三种条件的搭配组合就构成了我们的过滤表达式。

tcpdump -i eth0 -c 10 'udp'
tcpdump -i eth0 'dst 8.8.8.8'
tcpdump -i eth0 -c 3 'dst port 53 or dst port 80'
tcpdump -i eth0 'host roclinux.cn and (baidu.com or qiyi.com)'