如何使用tcpdump抓取一次http的请求和响应?
1. 抓指定 IP 的包:问题定向排查第一步
tcpdump -i eth0 host 192.168.10.10
还能更精准:
tcpdump -i eth0 src 192.168.10.10 # 抓源地址
tcpdump -i eth0 dst 192.168.10.10 # 抓目的地址
用来确认某个主机是否真的有发/收到包,常用于 ping 不通、连接失败的初查。
2. 抓指定端口的流量(TCP/UDP)
tcpdump -i eth0 port 443 # 抓 HTTPS 流量
tcpdump -i eth0 tcp port 22 # 抓 SSH
tcpdump -i eth0 udp port 53 # 抓 DNS
网络访问慢、卡顿、服务连接不上时,看看有没有 TCP 三次握手或是否有重传。
3. 抓指定协议,判断是应用、网络还是链路问题
tcpdump -i eth0 icmp # 抓 ping 包
tcpdump -i eth0 arp # 抓 ARP 请求/响应
tcpdump -i eth0 ether proto 0x88cc # 抓 LLDP 报文(交换机信息)
能快速判断:
- 是 ARP 不通,还是 IP 不通?
- 是没收到回应,还是发包压根没出去?
4. 只抓包头:排障看结构足够,别把服务器搞炸了
tcpdump -i eth0 -s 96 -c 100 -w arp.cap
解释一下:
- -s 96:每包只抓 96 字节头,够看 IP/TCP/UDP头信息
- -c 100:抓 100 个包就停,避免抓爆磁盘
- -w:写入文件供 Wireshark 后续分析
实战中你不可能无限抓,总得控制节奏,别光顾着抓包把现场搞炸。
5. 抓两台主机之间的通信 + 写文件
tcpdump -i eth0 host 10.1.1.1 and host 10.1.1.2 -w test.cap
常用于分析双向交互,比如:
- TCP连接卡在哪一步?
- 有发没回?回的包有没有异常?
6. 抓 vlan tag 包:做园区网排障绕不开
tcpdump -i eth0 vlan
如果你已经知道 VLAN ID:
tcpdump -i eth0 vlan 20
常用于:
- 判断 VLAN tag 是否打上了
- trunk 链路有没有 strip VLAN tag
- VLAN 间是否真能互通
7. 抓 DNS 报文看解析过程
tcpdump -i eth0 udp port 53 -vvv
看得出来:
- 具体发了哪个域名?
- 有没有被 DNS Server 正确回复?
- 是不是本地 DNS 没配置?
8. 抓 TCP 三次握手:连不上服务必查这一段
tcpdump -i eth0 tcp[13] & 0x02 != 0 # SYN 报文
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
进阶组合:
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
一看就能知道:
- 客户端有没有发 SYN?
- 服务端有没有回 SYN-ACK?
- 有没有 ACK 丢了?
9. 和 grep 联动,实时排查更丝滑
tcpdump -i eth0 -nn -l | grep 192.168.1.100
如果你在排查混杂的服务请求流量,这一招比你手动翻 .cap 文件快得多。
10. 排查广播风暴、环路问题?
tcpdump -i eth0 broadcast
tcpdump -i eth0 multicast
用来定位:
- ARP 广播是否异常频繁?(局域网互 ping 一下有无回应)
- STP/BPDU 是否被错误转发(可能导致环路)
- 某交换机口是否在无脑转发广播?