tcpdump可抓取并实时显示完整HTTP明文请求:用sudo tcpdump -i any -nn -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)

在 Linux 系统中用 tcpdump 抓取并查看完整的 HTTP 请求,关键在于:捕获足够长的数据、过滤出真实 HTTP 负载(跳过 TCP 握手和空包)、以可读格式实时显示。不需要 Wireshark 也能快速看到明文请求和响应。
一、基础命令:实时查看 HTTP 请求内容
执行以下命令,即可在终端中直接看到 ASCII 格式的 HTTP 报文:
- sudo tcpdump -i any -nn -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)>2)) != 0)'
说明:
-
-i any:监听所有网卡(适合容器或多网卡环境);也可换为
-i eth0指定接口。 - -nn:不解析 IP 和端口为域名/服务名,避免延迟,显示更准确。
- -A:以 ASCII 文本方式打印载荷,HTTP 请求头、JSON 体、响应状态行都能看清。
- -s 0:捕获完整数据包(防止截断,尤其对大 JSON 或表单很重要)。
-
BPF 过滤表达式:排除纯 ACK、SYN 等无 HTTP 内容的 TCP 包,只保留含实际应用层数据的包(即 TCP payload 长度 > 0),比单纯
port 80更精准。
二、简化版(适合调试快速验证)
如果只是想确认有没有 HTTP 流量、看一眼 GET/POST 是否发出,可用这个轻量命令:
- sudo tcpdump -i eth0 -nn -A -s 0 'tcp port 80' | grep -E "(GET|POST|HTTP/|Host:)"
它会实时过滤并高亮显示关键字段,适合快速扫视。但注意:可能漏掉被截断或非标准格式的请求。
三、保存为文件供后续分析
若需留存或用 Wireshark 深度分析(比如查耗时、重传、TLS 握手等),先保存再打开:
- sudo tcpdump -i any -nn -s 0 -w http_capture.pcap 'tcp port 80'
之后在图形界面机器上用 Wireshark 打开 http_capture.pcap,右键任意 HTTP 包 → Follow → HTTP Stream,就能按会话整理出完整请求+响应,带时间轴和字节统计。
四、注意事项
- 必须用 root 或 sudo 权限运行,否则无法进入混杂模式抓包。
- HTTPS(443 端口)流量是加密的,
-A只能看到 TLS 握手和乱码密文,无法查看 URL 或 body —— 如需分析 HTTPS,需在客户端或服务端做 SSLKEYLOGFILE 导出,再配合 Wireshark 解密。 - 若服务器用了反向代理(如 Nginx),且请求走的是 localhost 或 Unix socket,则 tcpdump 在物理网卡上抓不到 —— 此时应抓
lo接口:sudo tcpdump -i lo -nn -A -s 0 port 80。 - 生产环境慎用
-s 0长期抓包,可能影响性能或占满磁盘;建议加-c 100限制包数,或用-G 3600 -W 24实现每小时轮转。


















