目录
tcpdump简介
dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
实际操作来试试看。
在linux上使用:
tcpdump --help
可以看到版本及使用介绍:
在没有任何设置和过滤的情况下试一下,直接使用:
tcpdump
然后发现开始大量打印输出:
这些就是抓到的内容,普通情况下,直接启动tcpdump将默认监视eth0上所有流过的数据包。
下面的示例统一没有加-i,都是默认使用eth0的,如果想监听所有网卡,可以使用
tcpdump -i any
不过因为没有经过筛选,所以数量庞大,没法看的。
下面介绍一些实用的tcpdump命令,来筛选想要的数据。
tcpdump的使用方式
tcpdump采用命令行方式,它的命令格式为:
tcpdump[ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen] [ -T 类型 ] [ -w 文件名 ] [表达式 ]
下面来介绍一下参数和表达式的定义。
tcpdump的表达式
tcpdump的表达式由一个或多个“表达元”组成。
每个表达元之间由 and 或者 or 或者 not 来连接,可以使用括号 () ,由于括号是shell的特殊字符, 所以在shell脚本或终端中使用时必须对括号进行转义。
比如:
- tcpdump not 表达元1
- tcpdump 表达元1 and 表达元2
- tcpdump 表达元1 and \( 表达元2 or not 表达元3 \)
当然,and 和 && 符号,or 和 || 符号,not 和 ! 符号是等价的。
- tcpdump ! 表达元1
- tcpdump 表达元1 && 表达元2
- tcpdump 表达元1 && \( 表达元2 || ! 表达元3 \)
每个表达元的格式如下:
tcpdump [proto] [dir] [type] 参数id
proto
放到第一个参数的位置,用来描述id所属协议,过滤数据报的类型。
缺省值是监听所有协议的信息包。常用可选值有:
- fddi
- ip
- arp
- rarp
- tcp
- udp
等等。更多的参数说明,请参考关于tcpdump的man page。
dir
用来修饰参数id的方向,即是发送端还是接收端。
可选值有:
- dst,接收端
- src,发送端
- src && dst,发送端并且是接收端
- src || dst,发送端或者是接收端。也是缺省值
type
用来描述参数id的类型。
- host(缺省类型): 指明一台主机,如:host 210.27.48.2
- net: 指明一个网络地址,如:net 202.0.0.0
- port: 指明端口号,如:port 23