08 避坑与排查:答案不对时,往这四方向查

解不出或算不对,八成是这四类问题之一:漏取 / 错取 / 错序 / 错编码。这一章是"救命手册"。

本章目录
  1. 时间戳精度与同秒乱序(最高频大坑)
  2. 排序陷阱:到底按什么排
  3. 大小写 / 空白 / 换行 / 转义
  4. 漏取:字段名、正则、多协议混抓
  5. 错取:取了 UTF-8 却按 ASCII、编码链没解到头
  6. TLS 解密失败排查
  7. "四方向"排查清单

时间戳精度与同秒乱序(最高频大坑)

症状:按题目"按被窃取时间排序拼接"做,但 MD5/答案总不对。

根因:裁包时时间戳可能秒级。如果同一条时间戳对应 成百上千条记录,它们之间的相对顺序在秒级时间戳里不可分,单纯按时间排序就会乱序。

正确做法:双关键字排序 (时间, 出现顺序/序号)。在同一时间戳内,再按记录在流量中出现的先后次序来定序,才能得到与题目"被窃取顺序"一致的拼接。

代码:rows.sort(key=lambda r:(r.time, r.seq))。示例见 07 模板。

验证:算出后反查某几条,确认与你眼睛在 Wireshark 里看到的顺序一致再提交。

排序陷阱:到底按什么排

题干说法真实排序键
"按被窃取时间排序"相对/绝对抓包时间(.time_relative/.time),同秒加序号次键
"按 id / 序号升序"数据自带的自增 id 字段
"按请求先后顺序"直接在流量里出现的先后(frame.number)
"按字母序"字典序
当题干没明说顺序时:题目里若有 id/序号就按它;否则按出现顺序;不要拍脑袋。

大小写 / 空白 / 换行 / 转义

漏取:字段名、正则、多协议混抓

为什么会漏:

错取:编码链没解到头

TLS 解密失败排查

  1. 没填对 keylog 路径:编辑→首选项→协议→TLS→(Pre)-Master-Secret log filename 填 key.log 绝对路径后重开抓包文件(不是重开 Wireshark 就行,要 re-read)。
  2. 密钥不匹配版本:确认 keylog 与 pcap 来自同一次会话。
  3. 前向保密(PFS):若用 ECDHE 等 PFS 密钥交换,单纯私钥解不了——必须先有 keylog,或用 TLS1.2 非 PFS 的 RSA 私钥。
  4. 只看到 Grease/加密ClientHello:检查是否 TLS1.3 且没 keylog,那读不到。

"四方向"排查清单

答案不对,按序自查:

  1. 漏取了吗? → 字段名对不对、正则全取了吗、有没有别的协议/包。
  2. 错取了吗? → 编码冗余(多空格/引号/换行)、解码没到底、字节序、UTF-8。
  3. 错序了吗? → 排序键正确吗、同秒是否乱序、要不要次级键。
  4. 错编码了吗? → 有没有多套一层编码、大小写/换行污染。

把"我用的字段、我的排序键、我的解码步骤"写下来对着题目逐个核对,通常一眼能看出问题。