猫抓Cat-Catch资源嗅探扩展深度解析:从网页请求到本地文件的一条龙搬运流水线
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
猫抓(Cat-Catch)是一款开源的浏览器资源嗅探扩展,它的工作方式很像一名蹲在浏览器门口的"网络快递分拣员":你浏览网页时产生的每一个视频、音频、图片请求,都会被它登记在册,再由你一键决定转存为本地文件。本文按"第一次装→调准→玩透→接进工具链"的成长路线,带你把这条搬运流水线从外到内看个明白。
一、第一次打开它:弹窗里的三块功能区都是干什么的
安装后点工具栏图标,弹窗默认停在"当前页面"标签页。这里展示的不是你手动找出来的链接,而是扩展在后台替你实时盯梢到的所有资源:视频、音频、图片按时间倒序排列,每条记录都带文件名、大小,右侧是下载、预览和更多操作三个按钮。点选任意一条,下方会展开该资源的完整档案——MIME 类型、时长、分辨率、原始 URL,你能直接看到它来自哪个 CDN 域名。
弹窗顶部还有另外两个标签页:
- 其他页面:当前浏览器中其他标签页捕获到的资源也归集在此,不用切换页面就能跨页签批量下载;
- 媒体控制/其他功能:放的是模拟手机 UA、自动下载、录制脚本、设置等开关入口。
底部一排按钮中,"模拟手机"值得单独说:很多网站对桌面端隐藏了真实流地址,切到手机 UA 重新加载页面后,原本抓不到的资源会立刻现形。这一招在后面的实战环节会反复用到。
二、引擎盖之下:三类嗅探手段如何协同工作
猫抓的捕获能力由三个层次的代码共同撑起,入口文件都在catch-script/目录下。
第一层是网络请求代理。catch-script/catch.js中的CatCatcher类在页面脚本执行前(manifest.json里配置了run_at: document_start且all_frames: true)就完成注入,改写 XHR、Fetch 等原生 API,在请求发起的瞬间登记 URL 和响应类型。
第二层是流媒体管道监控。现代视频站几乎都走 MSE(MediaSource Extensions),所以扩展会代理 MediaSource 相关方法,从视频缓冲流中直接"嗅"出分片数据,这比单纯看请求更稳。
第三层是深度搜索。catch-script/search.js不只盯网络层,它还会在运行时主动"翻垃圾"——代理JSON.parse、劫持 Worker 创建流程,从接口返回的数据里递归找出疑似媒体 URL 和 AES 密钥。看看它对JSON.parse的包装:
const _JSONparse = JSON.parse; JSON.parse = function () { let data = _JSONparse.apply(this, arguments); findMedia(data); // 递归扫描返回体,发现媒体地址或密钥即上报 return data; }三层之外还有一道筛选闸门:dataRE = /^data:(application|video|audio)\//i这类正则配合扩展名黑名单,把广告追踪、统计上报等无关请求挡在门外,只留媒体。整个链路最后汇总到后台脚本js/background.js,由它统一维护资源列表、触发下载。
三、三分钟上车:三条安装路径按场景挑
| 安装方式 | 适用场景 | 操作要点 |
|---|---|---|
| 应用商店安装 | 日常使用(推荐) | Chrome Web Store、Edge 加载项、Firefox 附加组件(Firefox 需非国区 IP 访问) |
| 源码编译 | 开发调试、二次开发 | 克隆仓库 → 扩展管理页开"开发者模式" → 加载已解压的扩展程序 |
| CRX 文件部署 | 内网批量部署 | 从 Releases 下载 crx → 开开发者模式 → 拖入扩展管理页 |
源码方式的核心命令就一条:
git clone https://gitcode.com/GitHub_Trending/ca/cat-catch克隆后整个项目目录就是可直接加载的扩展本体,manifest.json就在根目录,改完代码到扩展管理页点一下刷新即可热更新。要注意版本门槛:项目从 1.0.17 起要求 Chromium 内核 93 以上,低于 93 只能用 1.0.16;想体验完整功能(侧边栏、声明式规则等 Manifest V3 特性),请用 104 以上的浏览器。Android 端 Edge 也有对应版本,官方 README 里提供了安装二维码。
四、调参指南:从"什么都抓"到"精准抓取"
默认配置抓得很宽,js/init.js里预置了 30 多种文件扩展名和 9 类 MIME 类型规则。但生产环境里你需要的是"只抓我要的",这时去设置页(options.html,逻辑在js/options.js)动三处:
1. 扩展名与类型规则。每条规则都能配一个最小体积阈值,比如只对大于 500KB 的.mp4感兴趣,就把它的大小条件从>= 0 KB改成>= 500 KB,小图、占位文件瞬间从列表里消失。
2. 正则白/黑名单。默认规则里已带几条站点级正则,比如用blackList: true把bilivideo.com的直播分片排除掉。你也可以仿照它写自己的规则——把 "只匹配" 和 "不匹配" 分开两条维护,比反复改一条规则更省心:
// 设置页里自定义的正则示例:命中即标记为 json 格式资源 { "type": "ig", "regex": "https://cache\\.video\\.[a-z]*\\.com/dash\\?tvid=.*", "ext": "json", "state": true }3. 屏蔽 URL 列表。与正则黑名单互补,直接按地址段屏蔽,适合"这个广告域名我永远不要"的场景。
性能方面有三个旋钮值得记下:autoClearMode控制捕获数据的清理频率(0 不清理 / 1 正常 / 2 更频繁);maxLength限制列表最大条目数(桌面默认 9999);checkDuplicates开关负责去重。内存吃紧时优先把这三处调紧。
五、硬核实战:加密 HLS 分片与 1.8GB 临界点
遇到 HLS 流媒体时,把捕获到的.m3u8链接丢进解析器(js/m3u8.js,底层封装了 hls.js),页面会展示全部 TS 分片清单、密钥信息和下载线程配置,支持一键合并为 MP4。
几个实战要点:
- AES-128 解密:密钥通常藏在接口响应里,深度搜索层会自动把 16 字节的 key 抓出来(
search.js里专门检测长度为 16 的数字数组/ArrayBuffer);万一没抓到,可以手动填 16 进制或 base64 格式的 key,再配合自定义 IV 偏移量重试。 - 多线程合并:分片下载器默认 6 线程(
js/m3u8.downloader.js里的Downloader类),网络好可以调高,注意同时会吃更多内存。 - 1.8GB 的坎:Chrome 下载 API 对大文件有硬限制,
init.js里写死了chromeLimitSize: 1.8 * 1024 * 1024 * 1024。应对方案是打开"每 1GB 保存一次"开关,配合 StreamSaver 边下边存,把大文件拆成连续写入,绕开单次下载的体积天花板。 - MPEG-DASH:遇到
.mpd清单也不慌,lib/mpd-parser.min.js负责解析,js/mpd.js处理自适应码率选择与分时段下载。
如果你习惯用 m3u8DL 这类命令行工具,解析器还支持一键生成命令并复制,把"在浏览器里点出来的参数"直接变成终端里可执行的一行。
六、进阶玩法:把嗅探结果喂进你的整个工具链
猫抓的价值不止于"人肉点下载",它预留了多条把资源推给其他程序的通道,都在设置页里:
| 通道 | 默认配置 | 典型用途 |
|---|---|---|
| Aria2 RPC | http://localhost:6800/jsonrpc | 把下载任务交给 aria2 多线程抢速 |
| 本地 HTTP 推送 | http://127.0.0.1:8000/(POST) | 接自家脚本、NAS 转存服务 |
| MQTT 消息 | test.mosquitto.org:8081(wss) | 推送到消息总线,联动其他设备 |
| 自定义协议 | m3u8dlre:"${url}" ... | 唤起本地下载器/命令行工具 |
自定义协议那一项最灵活,模板里支持${url}、${title}、${referer}等占位符,点击资源即可唤起本地程序。播放器联动同理,内置 PotPlayer、VLC、Android MX Player 的调用模板,视频可一键交给本地播放器,而不必先下载:
potplayer://${url} ${referer|exists:'/referer="*"'}此外,recorder.js可以把你的操作录制成回放脚本,适合需要反复捕获同一类页面的场景;ffmpeg 合并通道则把"下载后再转封装"的脏活外包给了在线 ffmpeg 实例。
七、兼容性矩阵与多语言覆盖
扩展基于 Manifest V3 构建,不同平台表现略有差异,规划部署前先对号入座:
| 平台 | 最低版本 | 推荐版本 | 已知限制 |
|---|---|---|---|
| Chrome / Chromium | 93 | 104+ | 无 |
| Microsoft Edge | 93 | 104+ | 无 |
| Firefox | 最新 | 最新 | 部分 API 受限,data URL 下载走降级方案 |
| Edge Android | 支持 | 最新 | 移动端交互有精简 |
Firefox 那个降级方案值得一提:js/function.js里专门写了downloadDataURL兜底——Firefox 的下载 API 无法处理 data URL,就退化为创建<a download>链接触发保存。
多语言方面,_locales/目录下已维护 en、es、ja、ko、pt_BR、ru、tr、vi、zh_CN、zh_TW 共 10 个语言包,新增语言只需照着现有messages.json补齐翻译即可。
八、排障速查:五分钟定位最常见问题
- 列表里什么都没有:先看扩展是否启用(快捷键开关)、页面是否已加载完毕;动态加载的内容要等触发后再捕获;最后确认是不是被正则黑名单或屏蔽 URL 误伤了。
- 抓到了但下载失败:优先检查网络连通性、磁盘剩余空间,以及是否触碰了 1.8GB 单文件上限;另存为模式被关闭时也可能静默失败。
- 加密流合并后无法播放:八成是 key 没捕获到或 IV 偏移不对,回到解析器手动补 key 重试;别忘了确认 Referer 是否正确,部分 CDN 校验它。
- 扩展明显变卡:调低
maxLength、把autoClearMode调到"更频繁",并减少同时下载的线程数;长时间使用后可到设置页清空捕获缓存。 - 想彻底放过某个站点:把它加进屏蔽 URL 列表,比反复写正则省事得多。
九、边界感与未来:一个开源嗅探器的自我修养
猫抓在"能抓"和"该抓"之间划了清晰界限。项目内置了"避免抓取列表"(当前预置了抖音域名),网站方如不希望被嗅探,可在仓库提交标题为[Opt-Out Request] 域名的 Issue,经核实后会被加入后续版本的拒绝列表。隐私层面,所有捕获数据只在本地存储与处理,不包含任何远程跟踪代码,这一点在 README 的隐私政策里写得很明确,也可以直接审计源码验证。
项目授权从 1.0 版的 MIT 变更为 2.0 版的 GPL-3.0,正是为了约束下游"拿去改改就闭源上架"的行为——商店里已经出现过植入广告的伪猫抓,认准官方渠道安装是保护自己的第一步。
对开发者而言,这是一个结构相当规整的 MV3 扩展范本:catch-script/管嗅探、js/管下载与界面逻辑、lib/集成第三方解析库、tools/sync-locales.js维护多语言同步。想参与贡献,可以从补一个语言包、修一个 issue 级别的 bug 开始。浏览器在进化,嗅探技术也在跟着 Web 标准博弈——Service Worker 化、更深的流协议支持,都是这条搬运流水线正在打磨的下一个环节。工具无罪,边界在心,把技术用在有授权的场景里,它就是你浏览器里最趁手的那把"快递分拣器"。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考