Linux中抓取并重组TCP流需先用tcpdump -s 0 -w捕获完整载荷,再通过Wireshark Follow TCP Stream或tshark -z follow,tcp,ascii实现应用层明文还原,纯命令行grep仅适用于未分片、未加密的简单HTTP场景。

Linux 系统中抓取并重组 TCP 流,核心目标是还原完整的应用层会话(如 HTTP 请求/响应、FTP 登录、Telnet 交互等),以便人工查看明文内容。这不能单靠 tcpdump 完成——它默认不重组 TCP 流,也不解析应用层;必须配合工具或参数组合实现。
用 tcpdump 抓包时确保关键参数到位
重组的前提是捕获足够完整、可关联的原始数据:
- -s 0:强制捕获每个数据包的全部载荷,避免默认截断(68 字节)导致关键字被切掉;
- -i 指定接口(如 eth0 或 any),确保监听到目标流量经过的路径;
- -w 文件名.pcap:保存为标准 pcap 格式,保留所有原始字节和时间戳,供后续重组分析;
- 不依赖实时 ASCII 输出过滤敏感词:-A 或 -X 只适合简单调试,无法跨分片匹配,且不保证 TCP 顺序重组。
用 Wireshark 手动重组并查看明文流
这是最可靠、最常用的人工审查方式:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 用
tcpdump -i eth0 -s 0 -w http.pcap port 80抓包后,在 Wireshark 中打开该文件; - 在封包列表中选中任意一个属于目标会话的 TCP 包;
- 右键 → Follow → TCP Stream,Wireshark 自动按序列号排序、重组该双向流;
- 窗口中直接显示完整明文(如 GET /login?user=admin&pwd=123456、HTTP 响应头与 HTML 内容);
- 支持搜索(Ctrl+F)、导出为文本或原始字节,也支持切换显示编码(如 UTF-8 / GBK)。
命令行下有限度地模拟流重组(适合简单场景)
若只能用终端,可用以下组合近似还原单向流(注意:仍非严格 TCP 重组,但对未分片、顺序到达的 HTTP GET 有效):
-
tcpdump -i eth0 -nnA -s 0 'port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' | grep -a -B2 -A10 "password\|pass\|user="; - 其中
-nnA禁用解析并以 ASCII 显示,-s 0保全内容; - 该方法仅适用于未加密、未压缩、关键字不出现在分片边界上的 HTTP/FTP 流量;
- 对 HTTPS、HTTP/2、gzip 压缩或含分片的长会话,无法还原,必须用 Wireshark。
进阶:用 tshark 实现脚本化流提取
tshark 是 Wireshark 的命令行版,支持基于流的导出:
-
tshark -r http.pcap -q -z follow,tcp,ascii,0:列出所有 TCP 流编号; -
tshark -r http.pcap -z follow,tcp,ascii,123 > stream_123.txt:将第 123 号流导出为可读文本; - 输出包含完整请求与响应,保留换行与空格,适合 grep 或人工审阅;
- 比纯 tcpdump + grep 更健壮,但仍要求 pcap 文件本身已含完整有序分片。

















