简介
Linux tcpdump命令用于倾倒网络传输数据;
执行tcpdump指令可列出经过指定网络界面的数据包文件头;
tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
安装
yum install -y tcpdump
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
tcpdump
监视指定网络接口的数据包
如果不指定网卡,默认tcpdump只会监视第一个网络接口;
tcpdump -i 网卡
参数说明
- -a 尝试将网络和广播地址转换成名称。
- -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
- -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
- -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
- -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
- -e 在每列倾倒资料上显示连接层级的文件头。
- -f 用数字显示网际网络地址。
- -F<表达文件> 指定内含表达方式的文件。
- -i<网络界面> 使用指定的网络截面送出数据包。
- -l 使用标准输出列的缓冲区。
- -n 不把主机的网络地址转换成名字。
- -N 不列出域名。
- -O 不将数据包编码最佳化。
- -p 不让网络界面进入混杂模式。
- -q 快速输出,仅列出少数的传输协议信息。
- -r<数据包文件> 从指定的文件读取数据包数据。
- -s<数据包大小> 设置每个数据包的大小。
- -S 用绝对而非相对数值列出TCP关联数。
- -t 在每列倾倒资料上不显示时间戳记。
- -tt 在每列倾倒资料上显示未经格式化的时间戳记。
- -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
- -v 详细显示指令执行过程。
- -vv 更详细显示指令执行过程。
- -x 用十六进制字码列出数据包资料。
- -w<数据包文件> 把数据包数据写入指定的文件。
基本语法
1、过滤主机
- 抓取所有经过eth1,目的或源地址是172.16.20.254的网络数据
tcpdump -i eth1 host 172.16.20.254
- 指定源地址
tcpdump -i eth1 src host 172.16.20.254
- 指定目的地址
tcpdump -i eth1 dst host 172.16.20.254
2、过滤端口
- 抓取所有经过eth1,目的或源端口是22的网络数据
tcpdump -i eth1 port 22
- 指定源端口
tcpdump -i eth1 src port 22
- 指定目的端口
tcpdump -i eth1 dst port 22
3、网络过滤
tcpdump -i enp1s0 net 10.10
tcpdump -i enp1s0 src net 10.10(指定源端口)
tcpdump -i enp1s0 dst net 10.10(指定目的端口)
4、协议过滤
tcpdump -i eth1 arp tcpdump -i eth1 ip tcpdump -i eth1 tcp tcpdump -i eth1 udp tcpdump -i eth1 icmp
5、常用表达式
非 : ! or not
且 : && or and
或 : || or or
- 抓取所有经过enp1s0,目的地址是172.16.20.254或10.10.1.10端口是22的TCP数据;
tcpdump -i enp1s0 '((tcp) and (port 22) and ((dst host 172.16.20.254) or (dst host 10.10.1.10)))'
- 抓取所有经过enp1s0,目标MAC地址是00:01:02:03:04:05的ICMP数据;
tcpdump -i enp1s0 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
- 抓取所有经过enp1s0,目的网络是10.10,但目的主机不是10.10.1.100的TCP数据;
tcpdump -i enp1s0 '((tcp) and ((dst net 10.10) and (not dst host 10.10.1.100)))'
高级包头过滤
proto[x:y] : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排) proto[x:y] & z = 0 : proto[x:y]和z的与操作为0 proto[x:y] & z !=0 : proto[x:y]和z的与操作不为0 proto[x:y] & z = z : proto[x:y]和z的与操作为z proto[x:y] = z : proto[x:y]等于z
操作符 : >, <, >=, <=, =, !=
IP头
只针对IPv4
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | <-- optional +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DATA ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
待补充。。。
参考:http://linuxwiki.github.io/NetTools/tcpdump.html#_4