kp-014

抓包分析:DevTools 与 mitmproxy

核心 ≈ 25 分钟 抓包DevToolsmitmproxyHAR逆向分析

前置知识

本文基于模型知识整理,建议核对官方文档(见 参考资料)。

一句话定义

抓包是观察「浏览器到底发了哪些请求、带了什么参数」的过程,DevTools 覆盖网页流量,mitmproxy 覆盖 App 流量,分析结论直接变成爬虫代码。

为什么重要

接口路线(效率最优路线)的全部输入来自抓包:URL、方法、参数、关键头。抓包能力弱的人只能盲目试错,抓包能力强的人十分钟内定下采集方案。

前置知识

kp-002(报文模型)、kp-012(知道要看 XHR)。

核心概念

  • Network 面板要素:过滤(Fetch/XHR/Doc)、Preserve log(跳转不丢记录)、Disable cache、时间线(请求先后与阻塞)。
  • Preview / Response:查看响应体;Initiator 列指出「谁发起了这条请求」。
  • Copy as cURL:把请求一键复制成 curl 命令,是转成 requests 的桥梁。
  • HAR:整页流量的 JSON 存档,可离线复查与分享。
  • mitmproxy:中间人代理,配证书后可解 HTTPS;用于 App 或系统级流量。

原理与机制

标准分析流水:

1. 打开 Preserve log + Fetch/XHR 过滤 → 刷新页面复现操作
2. 按时间/大小定位目标响应 → Preview 确认含目标数据
3. Headers 页签抄录: URL·Method·Query·Body·Cookie·Referer·自定义头
4. Copy as cURL → 本地重放 → 确认可复现
5. 触发一次翻页/筛选 → diff 两请求参数 → 归纳参数规则

cURL 转 requests 的机械映射:

# curl 'https://api.example.com/list?page=2' -H 'referer: https://example.com' -b 'sid=abc'
import requests
r = requests.get("https://api.example.com/list", params={"page": 2},
                 headers={"Referer": "https://example.com"},
                 cookies={"sid": "abc"}, timeout=(5, 20))

mitmproxy 的用武之地:App 内嵌接口(无 DevTools 可用)。mitmproxy/mitmweb 启动代理 → 手机 WiFi 指向电脑 → 安装 mitmproxy 证书 → 流量按域名过滤审阅。注意:仅用于自有 App 或已授权测试。

实例或案例

某列表页筛选「价格区间」后数据变化:在 Preserve log 下操作一次筛选,diff 请求参数发现 minPrice/maxPrice 出现在 query——筛选能力直接变成接口参数,无需任何 UI 自动化。这是抓包价值的最小缩影:把界面操作翻译成参数组合。

常见误区

  • 误区一:只看 Doc 类请求。 数据都在 Fetch/XHR;Doc 只有 HTML 壳。
  • 误区二:漏抄关键头。 自定义头(X-Token、sign)常是接口校验核心;cURL 复制法可避免手抄遗漏。
  • 误区三:忽略请求顺序。 有的接口依赖前面请求种下的 Cookie/token;重放单条失败时,先看 Initiator 链。

自测题

  1. Preserve log 解决什么问题?

答:页面跳转/刷新会清空 Network 记录,勾选后跨跳转保留全部请求,便于追踪完整链路。

  1. Copy as cURL 的两个用途?

答:一键转成可重放的命令验证接口;避免手抄漏头,再机械翻译为 requests 代码。

  1. 什么时候必须用 mitmproxy 而不是 DevTools?

答:分析 App(无浏览器 DevTools)或系统级流量时,经中间人代理解密 HTTPS 审阅。

与其他知识点的关系

kp-009 消费抓包结论;kp-015 逆向上一步发现的加密参数;kp-013 的响应监听等价于「程序内实时抓包」。

延伸阅读

Chrome DevTools 官方文档「Inspect network activity」;mitmproxy 官方文档快速上手。

相关知识点

学习进度