tcpflow 重组 HTTP 明文流
更新时间:2026-09-18。有时你只想「像看日志一样」把一个 HTTP 请求和响应完整读出来,不想在 Wireshark 里 Follow Stream。
tcpflow直接把 TCP 字节流重组成可读文本。加密流量抓包见 tcpdump 抓 HTTP/gRPC。
这个工具是做什么的
tcpflow 监听网卡,按 源IP.端口-目的IP.端口 把每个 TCP 连接的双向数据重组、去重、按序,默认每个方向各写一个文件(也可直接打印)。对明文 HTTP,效果接近把来回的报文拼成完整对话。
bash
yum install tcpflow / apt install tcpflow一、常用命令
bash
# 抓 80 端口流量,连接内容直接打印到终端(不落地文件)
sudo tcpflow -i any -C -J port 80
# 只看某主机 8080 的流量,内容输出到屏幕
sudo tcpflow -i eth0 -C host 10.0.0.21 and port 8080
# 落地成文件(默认当前目录生成 <src>-<dst> 两个文件)
sudo tcpflow -i eth0 -o /tmp/flows port 8080
ls -l /tmp/flows # 一个连接两个方向各一个文件,cat 即正文| 选项 | 作用 |
|---|---|
-i <iface> | 指定网卡(any 抓所有接口) |
-C | 直接打印到控制台(不写文件) |
-J | 终端彩色/更易读输出 |
-o dir | 重组文件输出目录 |
| BPF 过滤 | 同 tcpdump:port、host、and/or、src/dst |
二、典型场景
- 定位「客户端到底发了什么」:明文 JSON、Header、Host、Content-Length 一目了然。
- 验证代理/网关是否改写了请求头(如
X-Forwarded-For、鉴权头)。 - 还原内部未加密接口的请求/响应体做快速排障。
常见坑
- HTTPS 看不到正文:443 是 TLS,tcpflow 重组出的只是加密字节;要看明文需在客户端用代理(mitmproxy/Burp)或能拿到会话密钥的环境调试。
- HTTP/2、gRPC 是二进制分帧:即使 h2c 明文,重组出来也不是逐行可读的 HTTP/1 文本,得用专门工具(Wireshark/gRPC 调试器)。
- 高流量把磁盘写爆:默认按连接落文件,生产大流量下用
-C配合强过滤短时抓,或指定临时目录并及时清理。 - 需要 root/混杂模式:抓非本机产生的流量要特权和正确网卡,容器内还要对到相应网络命名空间。
- 长连接/分块传输:一个 keep-alive 连接承载多个请求时内容在同一流里,要自己按请求边界区分。
- 不能替代 tcpdump:要保留原始包做精细时序/重传分析仍用 tcpdump,tcpflow 强在「快速读正文」。
总结
tcpflow 与 tcpdump 的分工是后者存原始报文、前者按四元组把 TCP 双向字节流去重排序重组成可读文本,用 -i 指定网卡、-C 直接打印、-o 落地文件并配合 port/host 等 BPF 过滤,能像看日志一样快速还原明文 HTTP 的请求头与响应体、确认代理是否改头;但它看不到 HTTPS 加密正文、对 HTTP/2 与 gRPC 二进制分帧也不适用,生产高流量下默认落文件有写爆磁盘风险需短时强过滤,抓非本机流量要 root 和正确网卡,精细时序/重传分析仍应回到 tcpdump 与 Wireshark。