tcpdump : dump traffic on a network, 用于将网络中传送的数据包完全截获下来提供分析。
1、语法
tcpdump [-adeflnNOpqStvx][-c<数据包数目>]
[-dd][-ddd][-F<表达文件>][-i<网络界面>]
[-r<数据包文件>][-s<数据包大小>]
[-tt][-T<数据包类型>][-vv][-w<数据包文件>]
[输出数据栏位]
2、参数说明
-A
以ASCII 格式输出截获的数据包,分析网页很便利;-a
将网络地址和广播地址转换成名字;-C <file_size>
在将截获的数据包输出到一个指定的文件前,检查给定的文件的大小是否大于file_size
,如果大于,则关闭给定的文件,然后打开一个新的文件,新文件的后缀名(_1,_2…),其中file_size
的大小是 百万的整数倍;-c <count>
接收到count
个数据包之后退出tcpdump
命令;-d
将匹配信息包的代码以能理解的汇编格式给出;-dd
将匹配信息包的代码以能理解的C
语言 格式给出;-ddd
将匹配信息包的代码以能理解的 十进制 格式给出;-D
列出当前主机的所有网卡编号和名称;-e
在输出行打印出数据链路层的头部信息;-f
将外部的Internet
地址以数字的形式打印出来;-F<file>
从file
中读取表达式,并屏蔽命令行的表达式;-i <interface>
监听主机的interface
指定网卡上的数据包,如果没有指定,就是用最小网卡编号的网卡;-l
将数据包打印打 标准输出,也可以重定向到指定文件
tcpdump -l | tee dat;
or
tcpdump -l > dat & tail -f dat
-n
显示IP ,而不是主机名;-N
不列出域名;# <number>
输出显示行号;-O
输出不用最优化;-p
不让网卡进入混叠模式;-q
:快速输出,仅列出少数的传输协议信息;-r
:从file
文件中读取包(这些包一般通过-w
选项产生);-s
<数据包大小>:指定抓包显示一行的宽度,-s 0
表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet
MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失;-S
:用绝对而非相对数值列出TCP关联数;-t
:在输出的每一行不打印时间戳;-tt
:在输出的每一行显示未经格式化的时间戳记;-T
<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议);-v
:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;-vv
:输出详细的报文信息;-x/-xx/-X/-XX
:以十六进制显示包内容,几个选项只有细微的差别,详见man手册;-w
<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;
3、样例
- 输出
sundown
主机上的所有数据包
tcpdump host sundown
- 输出主机
helios
与 主机hot
之间的通信的数据包
tcpdump host helios and hot
- 输出除了主机
helios
以外的所有与主机ace
通信的IP数据包
tcpdump ip host ace not helios
- 输出所有本地主机与
Berkeley
主机通信的数据包
tcpdump net ucb-ether
- 输出所有通过网关
snup
的ftp
数据包
tcpdump 'gateway snup and (port ftp or ftp-data)'
- 输出所有 既不是来自也不是发给主机
local hosts
的数据包
tcpdump ip and not net localnet
- 输出非本地主机的所有
TCP
连接的具体信息(包括三次握手、四次挥手)
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp_fin) != 0 and not src and dst net localnet'
- 输出通过网关
snup
且长度大于 567 字节的IP 数据包
tcpdump 'gateway snup and ip[2:2] > 567'
- 输出不通过网卡进行的广播或者多播IP数据报
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
- 输出除了回显请求和回显应答以外的所有
ICMP
报文
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
4、输出格式
Tcpdump 输出是独立与协议的。
-
Timestamp
,缺省情况下输出格式为hh:mm:ss.frac
,时间精度和内核时钟精度一样,时间戳反映了内核回复一个数据包的时间。 -
Link Level Headers
,如果命令行中包括-e
选项,则链路层头部被输出,例如:以太网中,输出包括源地址、目的地址、使用的协议、数据包的长度。