抓包鹰抓包工具规则改写与断点拦截 改请求 Mock 数据的几种操作方式
📅 2026/7/29 10:22:41
👁️ 阅读次数
📝 编程学习
规则改写与断点拦截
抓包让你「看」,规则和断点让你「改」。本篇教你三种改流量的手法:加一条规则——从速查表点选一个动作、填上值,保存即热生效,成千上万条流量自动改,不用写脚本;设一个断点——把请求或响应半路拦下来,手动编辑再放行或丢弃;写一段脚本——只有前两者都表达不了的复杂逻辑,才动用脚本兜底。改哪种、改到什么程度,你说了算。
一、什么时候用
适合你满足下面任一条:
- 想给某些请求统一改个头 / 换个 UA / 加个参数,或把线上接口映射到本地开发服务器调试。
- 后端接口还没好,想先**返回一份假数据(Mock)**让前端跑起来。
- 想逐条盯着改:请求发出前、或响应回来前暂停,亲手改完再放行,改错的直接丢弃。
- 规则和断点都搞不定的复杂改写逻辑,想用脚本或自己的服务接管。
如果你只是想把某条抓到的请求改改参数再重发一遍、或压测,那不是本篇——见 请求构造与重放、会话重放与压力测试。
二、前置条件
- 规则改写与断点拦截作用在代理抓包会话上——流量得先经过工具、能被解密,才谈得上改。请先按 代理抓包 把会话建好、证书装好(证书安装),确认请求列表里能看到已解密的明文。
- 心里有个「要改哪些流量」的范围:一个域名、一批子域、某个端口,或某条完整 URL。下面的匹配语法都围绕它展开。
三、分步操作
A. 加一条改写规则,保存即生效
- 打开会话的「规则」面板。规则一行一条,形如
<匹配> <动作>://<值>;空行和#开头的注释会被忽略,每行单独校验。 - 不用背语法:面板自带一份可点击的速查表(转发 / Mock / 改头 / 指纹 / 断点等),点一下就把对应示例插进当前行,你照着把值改成自己的即可。
- 先写匹配(决定这条规则管哪些流量),常用几种:
- 精确域名:
traceeagle.com,也可带路径前缀traceeagle.com/path - 通配子域:
*.traceeagle.com(主域 + 所有子域一起命中) - 正则匹配整条 URL:
regex://… - 精确整条 URL:
$https://host/path - 按端口:
:8080 - 取反:任意匹配前加
!
- 精确域名:
- 再写动作,例如:
- 给命中的请求加一个响应头:
*.example.com resHeaders://X-Debug: 1 - 直接返回假数据、不请求服务器:
api.example.com/user mock://200|{"name":"tofu"} - 把线上域名映射到本地开发服务器:用速查表里的
map-remote示例,改成你的本地地址 - 一键放开 CORS、改状态码、改 UA / Referer、查找替换请求体或响应体……都能在速查表里找到对应动作。
- 给命中的请求加一个响应头:
- 值里可以用动态变量,让一条规则适配多变的流量:
${url} ${host} ${port} ${method} ${status} ${now} ${random} ${randomUUID} ${req.headers.X} ${res.headers.X}等;常用的值还能定义成命名值{name},一处定义、到处引用。 - 保存即热生效,不用重启会话。规则多了可以组织成命名分组,按组开关,临时想停哪批就关哪批。
想改的不止 HTTP:WebSocket 帧可按方向做
old=>new替换,裸 TCP / UDP 字节流也能按方向替换;还能做弱网模拟(请求 / 响应延迟、带宽限速,含 2G / 3G / 4G 预设)。这些同样是从速查表点选、填值。
B. 设断点,拦下来手动改再放行
需要逐条精细控制时,用断点在请求发出前或响应返回前暂停,弹出编辑框让你亲手改。两种拦法:
- 规则触发(精确拦某些流量):在规则里加一条
breakpoint://动作,标明拦哪个阶段——- 只拦请求:
api.example.com breakpoint://req - 只拦响应:
api.example.com breakpoint://res - 请求和响应都拦:
api.example.com breakpoint://both
- 只拦请求:
- 全局拦截开关(拦整会话):打开会话级的拦截开关,默认拦全部;再用拦截过滤规则收窄(按域名 / 方法 / 阶段),只拦你关心的。
- 流量命中后会暂停并弹出编辑框:
- 请求阶段可改:方法、URL(主机跟着 URL 变)、请求头、请求体。
- 响应阶段可改:状态码、响应头、响应体。
- 改完选择怎么处置:
- 放行(Resume):按你改后的内容继续发 / 继续返回。
- 丢弃(Abort):丢掉这条,客户端会收到一个网关错误。
- 同时命中多条时,它们会排队等你逐条处理,也可以一键全部放行。放着不管也不会把流量卡死——长时间未处理会自动按原样放行。
C. 脚本 / 插件兜底(规则表达不了时再用)
规则和断点都搞不定的逻辑,交给脚本或自己的服务:
- JavaScript 脚本:写
onRequest(req)/onResponse(resp),直接改字段就生效。内置日志、同步外呼其它服务、跨请求暂存数据(做计数器 / 缓存令牌)、Base64 与取字节、解压等常用辅助能力,够应付大多数自定义改写。 - HTTP 外呼插件:用
plugin://name规则把命中的请求 / 响应交给你自己的插件服务处理(以 HTTP 方式调用),插件返回改写后的内容,或直接返回一份 Mock。语言无关——团队用任意语言实现都行。
处理是有固定先后的:一条流量依次经过请求规则 → 请求脚本 → 请求插件 → 请求断点 → 转发 / Mock → 响应规则 → 响应脚本 → 响应插件 → 响应断点。记住一句话:先自动规则、再脚本、再插件,最后才轮到断点手动介入,各司其职、互不打架。
四、验证:确认改写真的生效了
- 规则:让客户端重新发一次命中的请求,在请求列表点开那条看详情——加的头 / 改的状态码 / Mock 的假数据应当已经出现在请求或响应里。改动没生效时,先确认这条规则已保存、所在分组没被关掉、匹配确实命中了这条 URL。
- 断点:触发后请求列表里该条会停住等待,编辑框弹出;放行后它按你改的内容继续,丢弃后客户端收到网关错误。对照一下最终结果和你的编辑是否一致。
五、不生效 / 拦不下来?逐条排查
| 现象 | 多半是 | 怎么办 |
|---|---|---|
| 规则一点反应都没有 | 这条流量根本没走代理会话、或还是密文 | 先回 代理抓包 确认流量经过工具且已解密,再谈改写 |
| 保存后仍不生效 | 匹配没命中,或规则所在分组被关了 | 核对匹配写法(精确 /*.通配 /regex:///$整条 URL /:端口);确认分组开关是打开的 |
| 某行标红 / 校验不过 | 该行语法不对(每行单独校验) | 从速查表点选对应动作重新插入,照着改值,别手打整段语法 |
| 断点没弹框 | breakpoint://的阶段选错,或全局拦截没开 | 只拦请求用req、只拦响应用res、都拦用both;或打开会话级拦截开关 |
| 拦下的流量自己放行了 | 停留太久触发了自动放行 | 这是防卡死的兜底,及时处理即可;批量命中时用「一键全部放行」 |
| 动态值没被替换 | 变量名写错或场景不支持 | 核对${...}拼写;命名值{name}主要用于请求 / 响应改写,WebSocket 帧改写的替换值用${...} |
| Mock 返回了但客户端报错 | body 格式或状态码不对 | 用 `mock://200 |
下一步
- 想把某条请求改改参数、整条重新发一遍:见 请求构造与重放。
- 想把一批请求批量重放、或压测接口:见 会话重放与压力测试。
- 改前改后想逐字段对比差异:见 请求对比。
- 还没把流量抓下来 / 解密:先看 代理抓包、证书安装;抓到之后怎么读见 数据查看与解码。
编程学习
技术分享
实战经验