零、简介
tcpdump 可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。
一、参数说明
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
- -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、tcpdump -D 获取网络适配器列表。
2、tcpdump -i <需要监控的网络适配器编号>,例如监控网卡 ens33 ,则使用 tcpdump -i 1
3. 使用无线网卡 ens33 监控 IP 地址为 172.16.86.111 上 443 端口的 tcp 协议。
sudo tcpdump -i 1 host 172.16.86.111 and tcp port 443
4. 使用无线网卡 ens33 监控 IP 地址为 172.16.86.111 上 8308 端口的 udp 协议:
sudo tcpdump -i 1 host 172.16.86.111 and udp port 8308
5、如果想要显示数据包的内容,需要使用 -X 参数,如,我想要显示捕获的 https 数据包 http header 的内容:
sudo tcpdump -X -i 1 host 172.16.86.111 and tcp port 443
可以看到该结果只显示了 https 头的一部分,没有显示全,是因为 tcpdump 默认将显示的数据长度截断了,可以使用 -s 后面加数据长度,来设置数据显示长度:
sudo tcpdump -X -s 0 -i 1 host 172.16.86.111 and tcp port 443
以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。
6、使用 -w 参数将捕获的数据存储为 .cap 文件:
sudo tcpdump -X -s 0 -i 1 -w tcplog.cap host 192.9.200.59 and tcp port 8000
使用 -r 参数查看 .cap 文件:
sudo tcpdump -X -s 0 -i 1 -r tcplog.cap host 172.16.86.111 and tcp port 443
7、抓 192.168.1.123 的 80 端口和 110 和 25 以外的其他端口的包
sudo tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
(SAW:Game Over!)