如何使用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 是否被错误转发(可能导致环路)
  • 某交换机口是否在无脑转发广播?
阅读剩余
THE END