写在之前
tcpdump 可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。(百度百科)
常用选项
-i 指定监听的网络接口
-n 不要解析域名
-nn 不要解析域名和端口
-c 抓取多少个报文
-w 抓取的数据包保存为文件
-v -vv -vvv 显示更多的详细信息
-s 抓取的报文字节数,默认只会截取96字节的内容,要想截取全部内容,可以配置为0
过滤规则
主机:host、src host、dst host
网段:net、src net、dst net
端口:port、src port、dst port
协议:ip、arp、icmp、tcp、udp、ip6
表达式:and or not,也可以是&& || ! 来表示
TCP Flags:tcp[tcpflags]
常用案例
# 抓取所有经过eth1的、目的或源IP为172.16的网段的数据包
tcpdump -i eth1 net 172.16.0.0
# 抓取所有经过eth1的、目的或源IP为172.16.2.101的网络数据包
tcpdump -i eth1 host 172.16.2.101
# 抓取所有经过eth1的、源IP为172.16.2.101的网络数据包
tcpdump -i eth1 src host 172.16.2.101
# 抓取所有经过eth1的、目的IP为172.16.2.101的网络数据包
tcpdump -i eth1 dst host 172.16.2.101
# 抓取所有经过eth1的、目的IP为www.baidu.com的网络数据包
tcpdump -i eth1 -nn dst host www.baidu.com
# 抓取所有经过eth1的、目的或源端口为80的网络数据包
tcpdump -i eth1 port 80
tcpdump -i eth1 src port 80
tcpdump -i eth1 dst port 80
# 抓取所有经过eth1的、协议相关的操作
tcpdump -i eth1 ip
tcpdump -i eth1 icmp
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
# 抓取特定状态的包
状态位 | 方式一 | 方式二 | 方式三 |
U – URG | tcp[13] & 32 != 0 | tcp[tcpflags] & tcp-urg != 0 | tcp[tcpflags] & tcp-urg == tcp-urg |
A – ACK | tcp[13] & 16 != 0 | tcp[tcpflags] & tcp-ack != 0 | tcp[tcpflags] & tcp-ack == tcp-ack |
P – PSH | tcp[13] & 8 != 0 | tcp[tcpflags] & tcp-push != 0 | tcp[tcpflags] & tcp-push == tcp-push |
R – RST | tcp[13] & 4 != 0 | tcp[tcpflags] & tcp-rst != 0 | tcp[tcpflags] & tcp-rst == tcp-rst |
S – SYN | tcp[13] & 2 != 0 | tcp[tcpflags] & tcp-syn != 0 | tcp[tcpflags] & tcp-syn == tcp-syn |
F – FIN | cp[13] & 0 != 0 | tcp[tcpflags] & tcp-fin != 0 | tcp[tcpflags] & tcp-fin == tcp-fin |
# 抓取 tcp 端口为80的tcp-syn的状态包
tcpdump -i eth1 tcp and port 80 and 'tcp[tcpflags] == tcp-syn'
总结
tcpdump 的使用相对简单,可以结合表达式(and or not)写出非常复杂的过滤条件,这里只是简单总结工作中常用的实例,一般情况下,还会结合wireshark一起使用,后面会写如何使用wireshark,及常见错误的一些分析总结。
您的关注是我写作的动力
往期分享
通俗易懂理解Kubernetes核心组件及原理
kubernetes v1.17.x 二进制安装文档
iptables 理论基础及日志记录
LVS 基础性实验及抓包分析
kube-proxy 如何实现流量转发
看了这篇!再不会 Nginx rewrite 算我输!
nginx location 知识知多少
你真的了解客户端请求如何到达服务器端的吗
专辑分享
kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群
第一篇 使用 Prometheus 监控 Kubernetes 集群理论篇