tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
tcpdump的表达式介绍
表达式[ expression ]是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字:
第一种是关于类型的关键字,主要包括host,net,port
例如:host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23指明端口号是23。如果没有指定类型,缺省的类型是host。
第二种是确定传输方向的关键字,主要包括src,dst,dst or src,dst and src,这些关键字指明了传输的方向。
举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2,dst net 202.0.0.0指明目的网络地址是202.0.0.0。如果没有指明方向关键字,缺省是src or dst。
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。
fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是 ‘not'或'!‘;与运算是’and’或’&&';或运算是’or’或’||’。这些关键字可以组合起来构成强大的组合条件来满足人们的需要。
使用括号"()"可以改变表达式的优先级,但需要注意的是括号会被shell解释,所以应该使用反斜线"\"转义为"\(\)",在需要的时候,还需要包围在引号中。
一个基本的表达式格式为
tcpdump [ options ] [ not ] proto dir type
tcpdump的参数介绍
-i interface
指定tcpdump需要监听的网络接口(网卡)。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n
对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-s len
抓取数据包时默认抓取长度为68字节。
-s 0表示可以抓到完整的数据包
-v
在解析和打印时,生成(稍微多一点)详细的输出。例如,打印IP包中的生存时间、标识、总长度和选项。还支持附加的包完整性检查,如验证IP和ICMP头校验和。
当使用-w选项写入文件时,每10秒报告捕获的包的数量。
-vv:更详细的输出。例如,从NFS应答包打印其他字段,并且完全解码SMB包。
-vvv:产生比-vv更详细的输出。
-X
在解析和打印时,除了打印每个包的头之外,还要以十六进制和ASCII格式打印每个包的数据(不包括链接级头)。这对于分析新协议非常方便。
-XX:在解析和打印时,除了打印每个包的头信息外,还要以十六进制和ASCII格式打印每个包的数据(包括它的链路级头信息)。
-w
将抓取的报文信息输出到指定文件中
示例
抓取80端口的包,输出到test.cap文件中:
tcpdump -i any -s 0 -w /home/test.cap tcp -v port 80
抓取80端口的包,直接输出报文信息:
tcpdump -i any -s 0 -nn -XX -vv port 80