tcpdump -i eth0 -nn -s0 port 80可精准捕获eth0上完整http流量;必须指定真实网卡(非any或lo)、加-nn跳过dns解析、-s0避免截断http体、-w保存pcap供wireshark分析,并可用host等进一步过滤目标通信。

直接用 tcpdump -i eth0 -nn -s0 port 80 就能捕获指定网卡(eth0)上所有 80 端口的完整流量,不用绕弯子。关键不是“会不会用”,而是“抓得准、看得清、不漏关键字段”。
明确指定网卡和端口是最基础也最关键的一步
很多问题其实出在没选对网卡或端口范围不对。Linux 可能有多个网卡(eth0、ens33、docker0、lo),而 tcpdump -i any 虽然方便,但会混入本地回环(lo)或容器流量,干扰判断。
- 先查真实网卡名:
ip link show | grep "state UP"或ifconfig -a,确认业务流量走的是哪块物理/虚拟网卡 - HTTP 服务不一定只在 80 端口:可能是 8080、8000,或 HTTPS 的 443;微服务常用 9000–9999 范围,可用
portrange 9000-9999 - 避免用
-i lo抓本机 curl 测试——它不经过物理网卡,容易误判网络层问题
必须加的三个参数:-nn、-s0、-w
默认行为会掩盖关键信息:DNS 解析拖慢速度、截断 HTTP body、输出刷屏难定位。
-
-nn:跳过 DNS 和端口名解析,直接显示 IP 和数字端口(比如 192.168.1.50:8080),既快又准 -
-s0:强制抓取完整数据包。HTTP 响应体、JSON 内容、错误堆栈都可能被默认的 96 字节截断,排查应用层问题时这步不能省 -
-w capture.pcap:保存为标准 PCAP 格式,后续可用 Wireshark 深度分析(比如看 TCP 重传、TLS 握手、HTTP 状态码)
精准过滤目标通信流
光抓端口还不够——你可能只想看跟某台后端服务器的交互,或者排除健康检查流量。
- 只抓与特定服务通信:
tcpdump -i eth0 -nn -s0 host 10.20.30.40 and port 8080 - 区分请求和响应方向:
src host 10.20.30.40(只看对方发来的包),dst host 10.20.30.40(只看我们发过去的) - 排除干扰流量:比如跳过心跳检测(假设是每秒一次的 GET /health),可用
not port 8080 or not src port 8080组合过滤
边抓边看 + 快速验证是否生效
别等抓完再打开 Wireshark——先确认流量真的被捕捉到了。
- 加
-A实时以 ASCII 显示(适合 HTTP):tcpdump -i eth0 -nn -A port 80,能看到明文请求行和响应头 - 加
-c 50限制数量,防止误操作跑满磁盘:tcpdump -i eth0 -nn -s0 -c 50 -w test.pcap port 8080 - 抓完立刻用
tcpdump -r test.pcap -A | head -20快速扫一眼前几行,确认有 GET/POST 和 HTTP/1.1 200 等关键字段











