抓包鹰抓包工具规则改写与断点拦截 改请求 Mock 数据的几种操作方式

📅 2026/7/29 10:22:41 👁️ 阅读次数 📝 编程学习
抓包鹰抓包工具规则改写与断点拦截 改请求 Mock 数据的几种操作方式

规则改写与断点拦截

抓包让你「看」,规则和断点让你「改」。本篇教你三种改流量的手法:加一条规则——从速查表点选一个动作、填上值,保存即热生效,成千上万条流量自动改,不用写脚本;设一个断点——把请求或响应半路拦下来,手动编辑再放行或丢弃;写一段脚本——只有前两者都表达不了的复杂逻辑,才动用脚本兜底。改哪种、改到什么程度,你说了算。

一、什么时候用

适合你满足下面任一条:

  • 想给某些请求统一改个头 / 换个 UA / 加个参数,或把线上接口映射到本地开发服务器调试。
  • 后端接口还没好,想先**返回一份假数据(Mock)**让前端跑起来。
  • 逐条盯着改:请求发出前、或响应回来前暂停,亲手改完再放行,改错的直接丢弃。
  • 规则和断点都搞不定的复杂改写逻辑,想用脚本或自己的服务接管。

如果你只是想把某条抓到的请求改改参数再重发一遍、或压测,那不是本篇——见 请求构造与重放、会话重放与压力测试。

二、前置条件

  • 规则改写与断点拦截作用在代理抓包会话上——流量得先经过工具、能被解密,才谈得上改。请先按 代理抓包 把会话建好、证书装好(证书安装),确认请求列表里能看到已解密的明文。
  • 心里有个「要改哪些流量」的范围:一个域名、一批子域、某个端口,或某条完整 URL。下面的匹配语法都围绕它展开。

三、分步操作

A. 加一条改写规则,保存即生效

  1. 打开会话的「规则」面板。规则一行一条,形如<匹配> <动作>://<值>;空行和#开头的注释会被忽略,每行单独校验。
  2. 不用背语法:面板自带一份可点击的速查表(转发 / Mock / 改头 / 指纹 / 断点等),点一下就把对应示例插进当前行,你照着把值改成自己的即可。
  3. 先写匹配(决定这条规则管哪些流量),常用几种:
    • 精确域名:traceeagle.com,也可带路径前缀traceeagle.com/path
    • 通配子域:*.traceeagle.com(主域 + 所有子域一起命中)
    • 正则匹配整条 URL:regex://…
    • 精确整条 URL:$https://host/path
    • 按端口::8080
    • 取反:任意匹配前加!
  4. 再写动作,例如:
    • 给命中的请求加一个响应头:*.example.com resHeaders://X-Debug: 1
    • 直接返回假数据、不请求服务器:api.example.com/user mock://200|{"name":"tofu"}
    • 把线上域名映射到本地开发服务器:用速查表里的map-remote示例,改成你的本地地址
    • 一键放开 CORS、改状态码、改 UA / Referer、查找替换请求体或响应体……都能在速查表里找到对应动作。
  5. 值里可以用动态变量,让一条规则适配多变的流量:${url} ${host} ${port} ${method} ${status} ${now} ${random} ${randomUUID} ${req.headers.X} ${res.headers.X}等;常用的值还能定义成命名值{name},一处定义、到处引用。
  6. 保存即热生效,不用重启会话。规则多了可以组织成命名分组,按组开关,临时想停哪批就关哪批。

想改的不止 HTTP:WebSocket 帧可按方向做old=>new替换,裸 TCP / UDP 字节流也能按方向替换;还能做弱网模拟(请求 / 响应延迟、带宽限速,含 2G / 3G / 4G 预设)。这些同样是从速查表点选、填值。

B. 设断点,拦下来手动改再放行

需要逐条精细控制时,用断点在请求发出前响应返回前暂停,弹出编辑框让你亲手改。两种拦法:

  1. 规则触发(精确拦某些流量):在规则里加一条breakpoint://动作,标明拦哪个阶段——
    • 只拦请求:api.example.com breakpoint://req
    • 只拦响应:api.example.com breakpoint://res
    • 请求和响应都拦:api.example.com breakpoint://both
  2. 全局拦截开关(拦整会话):打开会话级的拦截开关,默认拦全部;再用拦截过滤规则收窄(按域名 / 方法 / 阶段),只拦你关心的。
  3. 流量命中后会暂停并弹出编辑框
    • 请求阶段可改:方法、URL(主机跟着 URL 变)、请求头、请求体。
    • 响应阶段可改:状态码、响应头、响应体。
  4. 改完选择怎么处置:
    • 放行(Resume):按你改后的内容继续发 / 继续返回。
    • 丢弃(Abort):丢掉这条,客户端会收到一个网关错误。
  5. 同时命中多条时,它们会排队等你逐条处理,也可以一键全部放行。放着不管也不会把流量卡死——长时间未处理会自动按原样放行

C. 脚本 / 插件兜底(规则表达不了时再用)

规则和断点都搞不定的逻辑,交给脚本或自己的服务:

  1. JavaScript 脚本:写onRequest(req)/onResponse(resp),直接改字段就生效。内置日志、同步外呼其它服务、跨请求暂存数据(做计数器 / 缓存令牌)、Base64 与取字节、解压等常用辅助能力,够应付大多数自定义改写。
  2. HTTP 外呼插件:用plugin://name规则把命中的请求 / 响应交给你自己的插件服务处理(以 HTTP 方式调用),插件返回改写后的内容,或直接返回一份 Mock。语言无关——团队用任意语言实现都行。

处理是有固定先后的:一条流量依次经过请求规则 → 请求脚本 → 请求插件 → 请求断点 → 转发 / Mock → 响应规则 → 响应脚本 → 响应插件 → 响应断点。记住一句话:先自动规则、再脚本、再插件,最后才轮到断点手动介入,各司其职、互不打架。


四、验证:确认改写真的生效了

  • 规则:让客户端重新发一次命中的请求,在请求列表点开那条看详情——加的头 / 改的状态码 / Mock 的假数据应当已经出现在请求或响应里。改动没生效时,先确认这条规则已保存、所在分组没被关掉、匹配确实命中了这条 URL
  • 断点:触发后请求列表里该条会停住等待,编辑框弹出;放行后它按你改的内容继续,丢弃后客户端收到网关错误。对照一下最终结果和你的编辑是否一致。

五、不生效 / 拦不下来?逐条排查

现象多半是怎么办
规则一点反应都没有这条流量根本没走代理会话、或还是密文先回 代理抓包 确认流量经过工具且已解密,再谈改写
保存后仍不生效匹配没命中,或规则所在分组被关了核对匹配写法(精确 /*.通配 /regex:///$整条 URL /:端口);确认分组开关是打开的
某行标红 / 校验不过该行语法不对(每行单独校验)速查表点选对应动作重新插入,照着改值,别手打整段语法
断点没弹框breakpoint://的阶段选错,或全局拦截没开只拦请求用req、只拦响应用res、都拦用both;或打开会话级拦截开关
拦下的流量自己放行了停留太久触发了自动放行这是防卡死的兜底,及时处理即可;批量命中时用「一键全部放行」
动态值没被替换变量名写错或场景不支持核对${...}拼写;命名值{name}主要用于请求 / 响应改写,WebSocket 帧改写的替换值用${...}
Mock 返回了但客户端报错body 格式或状态码不对用 `mock://200

下一步

  • 想把某条请求改改参数、整条重新发一遍:见 请求构造与重放。
  • 想把一批请求批量重放、或压测接口:见 会话重放与压力测试。
  • 改前改后想逐字段对比差异:见 请求对比。
  • 还没把流量抓下来 / 解密:先看 代理抓包、证书安装;抓到之后怎么读见 数据查看与解码。