解不出或算不对,八成是这四类问题之一:漏取 / 错取 / 错序 / 错编码。这一章是"救命手册"。
根因:裁包时时间戳可能秒级。如果同一条时间戳对应 成百上千条记录,它们之间的相对顺序在秒级时间戳里不可分,单纯按时间排序就会乱序。
正确做法:双关键字排序 (时间, 出现顺序/序号)。在同一时间戳内,再按记录在流量中出现的先后次序来定序,才能得到与题目"被窃取顺序"一致的拼接。
代码:rows.sort(key=lambda r:(r.time, r.seq))。示例见 07 模板。
验证:算出后反查某几条,确认与你眼睛在 Wireshark 里看到的顺序一致再提交。
| 题干说法 | 真实排序键 |
|---|---|
| "按被窃取时间排序" | 相对/绝对抓包时间(.time_relative/.time),同秒加序号次键 |
| "按 id / 序号升序" | 数据自带的自增 id 字段 |
| "按请求先后顺序" | 直接在流量里出现的先后(frame.number) |
| "按字母序" | 字典序 |
\r\n 或空格,会污染字符串。用 .strip() 或正则只取字段内纯值。\" 可能多带引号,正则 "idcard":"…" 时要处理转义;URL 里 %2f 等的斜杠别漏还原。}:复制粘贴时别漏末尾大括号或引号。为什么会漏:
idcard,但响应 JSON 可能是 identity/sfz——先用 统计→HTTP 或导出对象确认真实字段名。\d{18} 会漏带字母的;.*? 非贪婪可能提前停。先在 2~3 条上验证再铺开。统计→协议分级,把所有含该关键字的协议都扫一遍。encoding='utf-8', errors='ignore' 读,否则崩溃或取到半个字符。raw[-i] 或 bytearray(reversed(...)) 反一下。ROT、凯撒、自定义字母表),去在线解码或写映射表。编辑→首选项→协议→TLS→(Pre)-Master-Secret log filename 填 key.log 绝对路径后重开抓包文件(不是重开 Wireshark 就行,要 re-read)。TLS1.3 且没 keylog,那读不到。答案不对,按序自查:
把"我用的字段、我的排序键、我的解码步骤"写下来对着题目逐个核对,通常一眼能看出问题。