猫抓Cat-Catch:浏览器资源嗅探扩展指南
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
视频在播,下载按钮却消失了
你在核对一份客户发来的样片视频。链接打开,视频正常播放,但右键菜单是空的,页面上没有下载入口,开发者工具里的 URL 一复制就失效。这个时刻你需要猫抓(Cat-Catch)——一个浏览器资源嗅探扩展。它不破解页面,只是默默"看着"浏览器网络层发生的每一次请求,把媒体资源从页面加载流程里直接捞出来,变成你能下载的文件。
猫抓能做什么:能力边界一览
猫抓是一款开源的浏览器资源嗅探扩展,用于筛选、列出并下载当前页面加载的所有媒体资源。
- 被动嗅探:自动识别页面加载的音频、视频、图片等媒体文件
- 主动捕获:代理 MediaSource 接口,逐片记录动态加载的加密流媒体
- m3u8 解析:解析播放列表、识别 AES-128 密钥、多线程合并下载
- 多协议支持:覆盖 HLS、DASH(mpd)、WebRTC 和普通 HTTP 文件
- 外部下载器对接:推送 Aria2 RPC,或通过 m3u8dl:// 协议调用 N_m3u8DL-CLI
- 在线转码:发送到在线 ffmpeg 合并转成 mp4
- 多语言界面:官方内置中、英、日、西等十种语言
下载一个正在播放的视频:完整走一遍流程
用法本身很简单:在 Chrome 或 Edge 商店搜索"Cat-Catch"安装,打开带视频的页面,点击工具栏猫爪图标,在弹出列表里勾选资源、点下载。
理解这个项目的关键在于:列表里的资源是怎么来的?背后是两套互补的机制在协同。
第一层是网络层监听。扩展通过 webRequest API(在 manifest.json 的权限声明里可以查到)监听页面发出的每个请求,当响应的 Content-Type 或 URL 命中媒体规则时,就把地址记入当前标签页的资源列表。静态的 mp4、图片、音频,基本在这一层就被抓到了——所以你打开扩展图标,列表往往已经就绪,不需要刷新或手动触发。
第二层是媒体层代理。很多网站的视频并不是一个完整的 mp4,而是通过 MediaSource 接口把分片逐块喂给<video>标签——网络层根本看不到"完整文件"。猫抓的做法是在注入脚本 catch-script/catch.js 里,用 Proxy 重写 MediaSource 的 addSourceBuffer 和 appendBuffer 方法,把每次追加的分片数据记录下来。关键入口是 CatCatcher 类的 proxyMediaSourceMethods 方法,模块职责大致是:
catch-script/catch.js 模块职责 ├── 代理 addSourceBuffer / appendBuffer,记录视频分片 ├── 管理捕获开关与已捕获数据量 ├── 达到 1GB 阈值时自动触发下载 └── 文件名获取(页面标题 / 正则提取)所以普通嗅探工具抓不到的视频,猫抓能抓到:前者只盯着网络层,后者把媒体层这条路径也补上了。
当视频变成几百个分片:m3u8 解析器的取舍
更棘手的场景:页面给你的只是一个 .m3u8 播放列表——它本身不含视频,只是一份列出几十到上千个 .ts 分片地址的"菜单",里面还可能声明 AES-128 密钥。直接下载毫无意义,这时候需要 m3u8 解析器(js/m3u8.js)。
工作流分三步:
- 解析与校验:拉取播放列表,读取总时长、分辨率、预估文件大小,识别密钥与加密方式
- 密钥处理:用深度搜索脚本(catch-script/search.js)从页面数据里找疑似密钥,或手动填写十六进制 / base64 密钥
- 并发下载:最多 6 线程,支持断点重试、任意切片勾选、合并,结果可推给 Aria2 或在线 ffmpeg 转 mp4
这里有个刻意的取舍:线程上限被限制在 6(2.4.7 版本起调整)。线程越多下载越快,但对目标服务器的压力也越大。猫抓选择把"下载体验"和"不把别人的网站搞崩"放在同一优先级。
另一个容易被忽视的问题叫"一次性 URL":播放列表地址只在页面存活期间有效,复制到别的工具里就失效。2.7.0 起解析器直接从浏览器缓存读取 m3u8 内容,并连同来源页的 Referer 与自定义请求头一起传递——专治这类"链接一拷贝就作废"的场景。⚡
猫抓是怎么长出来的:三个改变方向的转折点
问题:Service Worker 会被杀死。Manifest V3 要求扩展后台使用 Service Worker,浏览器会在空闲约 5 分钟后强制终止它,扩展状态随之丢失。选择:1.0.24 起加入 Heart Beat 心跳机制,内容脚本与后台保持低频通信维持存活,后台还会周期性自我唤醒——js/background.js 文件开头那段 HeartBeat port 逻辑就是干这个的。代价:这本质上是对浏览器省电机制的对抗,开发者在 2.0.0 日志里直白地写"继续用肮脏的手段对抗 Manifest V3"。所以哪怕你长时间挂着页面,捕获到的资源列表也不会突然清空。
问题:高频读写拖垮扩展。storage.local 在高频率读写下出现 IO 错误,直接导致扩展不可用。选择:2.5.3 起改用 storage.session。代价:会话级存储天然不持久——团队用一部分持久性换来了稳定,而"导入 / 导出配置"功能接过了持久化的需求。
问题:被动嗅探抓不到动态视频。2.0.0 的更新日志写得很直白:"视频捕获功能,解决被动嗅探无法下载视频的问题"。选择:引入上面说的 MediaSource 代理机制。代价:注入脚本会介入页面自身的运行——更新日志里"深度搜索导致网页无法正常使用"这类修复反复出现,"抓得全"和"不弄坏页面"的平衡是逐版本磨出来的。
上手:从安装到第一次下载
- 在 Chrome 网上应用店或 Edge 插件商店搜索"Cat-Catch"安装(Firefox 也支持)
- 打开任意含媒体内容的页面,点击工具栏猫爪图标
- 在资源列表中筛选、勾选、下载
- (可选)想看源码:
git clone https://gitcode.com/GitHub_Trending/ca/cat-catch - 打开浏览器"扩展程序"页开启"开发者模式",点击"加载已解压的扩展程序",选中项目文件夹
源码阅读入口:
- catch-script/catch.js:嗅探核心,MediaSource 代理
- js/m3u8.js:m3u8 解析与多线程下载
- js/downloader.js:下载逻辑
- js/background.js:后台运行与心跳机制
- catch-script/search.js:密钥深度搜索脚本
留给你的一个问题
随着 DRM 加密和反嗅探手段越来越精密,浏览器内的媒体处理工具会不会陷入无休止的猫鼠游戏?也许答案在猫抓已经走出的方向里:引入 MQTT 协议把资源推送到云端,让浏览器成为加工车间,而不是终点站。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考