猫抓 cat-catch 完整指南:浏览器资源嗅探扩展如何把网页视频与 m3u8 直播流变成可下载文件
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
猫抓(cat-catch)是一款运行在 Chrome、Edge 与 Firefox 上的开源浏览器资源嗅探扩展,当前版本 2.7.2。它在后台持续监听网页发出的每一条网络请求,按类型、大小、正则把视频、音频、m3u8 播放列表等媒体资源自动筛进列表,再配合内置的 m3u8 解析器完成切片合并、AES 解密与 mp4 转码,解决"网页里能看、却存不下来"的核心问题。所有数据仅在本机存储处理,不上报任何远程服务器(见 README 隐私政策)。
功能与版本速览
先给一张全景表,方便 30 秒建立认知。版本号均可在 CHANGELOG.md 中查证:
| 功能 | 引入版本 | 说明与局限 |
|---|---|---|
| 被动资源嗅探(视频/音频/m3u8/mpd) | 1.0.18 起 | 每标签页最多存 9999 条(2.5.9 起),超 500 条时面板可中断加载保流畅(2.4.2) |
| 正则匹配抓取与屏蔽 | 1.0.23 | 2.6.0 起正则可读取请求头参与判断 |
过滤大小表达式(如>100 KB、500-1000 MB) | 2.6.8 | 仅作用于嗅探过滤,不作用于解析器 |
| m3u8 解析器(切片合并/解密/转码) | 2.0.0 起在线合并 | 最大 6 下载线程(2.4.7);2.7.1 起下载失败自动重试 |
| 在线 ffmpeg 转 mp4 | 2.3.0 | 2.6.8 起支持"嵌套在线 ffmpeg",不再单独开标签页 |
| WebRTC 录制脚本 | 2.4.9(2.5.3 重写) | 侵入页面,建议按需开启而非常驻 |
| 视频捕获 / 缓存捕捉 | 2.0.0 | 对被动嗅探盲区的主动兜底 |
| 深度搜索(搜 m3u8 地址与疑似密钥) | 2.2.4 | 2.5.7 起支持密钥验证;2.6.6 起可解析 vimeo playlist.json |
| 屏蔽列表(黑/白名单) | 2.5.9 | 2.6.5 起另有全局强制屏蔽名单 |
| 推送 aria2 / MQTT / 调用本地程序 | 2.4.7 / 2.6.4 / 2.5.3 | aria2 支持 RPC 密钥与指定下载目录(2.7.0) |
| 快捷键、自定义 CSS | 2.4.0 | manifest 预置enable、auto_down、deepSearch等命令槽位 |
典型场景:从嗅探到落地的三条路径
场景一:网页在播的视频,右键"另存为"只能存下几 KB 占位符
场景描述:视频页通常把媒体拆成几百条请求——可能是一个.mp4,也可能是一段段.ts切片。手动打开 F12 翻 Network 面板,既慢又依赖经验。
为什么常规做法行不通:人眼无法在持续刷新的请求流里分辨"哪条才是真正的媒体",且防盗链资源离开原页面后 Referer/Cookie 不匹配就会失效。
猫抓分 3 步解决:后台 Service Worker 通过webRequestAPI 在"发出请求"和"收到响应头"两个节点捕获数据(见 js/background.js);按你配置的类型、大小、正则过滤后存入列表,并记录该资源当时的完整请求头;下载时原样复用这些请求头,直接落盘。预期结果:播放几秒视频后点开面板,列表里已出现按标签页分组的资源条目,勾选下载即可。
猫抓弹出面板:按标签页分组展示嗅探到的视频与 m3u8 资源,支持预览与正则筛选
场景二:m3u8 地址下载下来的只是"播放顺序表",不是视频
场景描述:大量网页用 HLS(m3u8,一种按顺序列出视频切片的播放列表格式)播放。直接复制 m3u8 地址下载,得到的只是一个文本文件。
为什么常规做法行不通:切片分散在几十上百个请求里,需要并发拉取、按序合并;加密流还要先取 AES 密钥解密;带EXT-X-BYTERANGE标签的"伪切片"(同一 mp4 内按字节范围切出)更是标准工具容易翻车的地方。
猫抓分 4 步解决:点击资源列表的解析器图标进入独立解析页(m3u8.html 与 js/m3u8.js);页面展示全部切片、总时长与文件大小估算(2.6.2 起),支持点选任意切片合并(2.6.8 起);加密流可手动填密钥,或用深度搜索在页面脚本中搜疑似密钥(2.2.4 起,2.5.7 起可验证);最后选择"ffmpeg 转码"(默认)或"边下边存",输出完整 mp4。预期结果:一个完整、可播放的本地文件。局限:一次性 URL(离开页面即失效)需要 2.7.0 起"从缓存中读取 m3u8"来缓解,不能保证万能。
m3u8 解析器:展示切片列表、自定义密钥与下载参数,是猫抓最重的功能块
场景三:媒体流根本不发 HTTP 请求,嗅探天然失明
场景描述:视频通话、部分直播用 WebRTC(浏览器间点对点实时通信协议)直接推流,网络上不存在可嗅探的媒体 URL;少数站点的播放地址则藏在页面 JS 里。
为什么常规做法行不通:webRequest 只能看到真实发生的网络请求,对 P2P 通道与脚本内动态生成的地址均无感知。
猫抓分 2 步解决:在catch-script/目录提供一组按需注入页面的脚本——webrtc.js 注入悬浮面板列出可抓取的音视频轨道(视频码率 2.5/5/8/16 Mbps、音频 128/256 kbps 可选,支持"1 小时保存一次"生成分段文件);search.js 深度搜索页面脚本中的 m3u8 地址与密钥。代价:这类脚本会侵入页面,2.6.5 与 2.6.6 都曾修复"深度搜索导致某些网站无法正常使用"的问题,务必按需开启而非常驻。
实操走查:安装、第一次嗅探与进阶玩法
安装(三选一)
- 应用商店:在 Chrome Web Store / Edge 附加组件 / Firefox Add-ons 搜索 cat-catch 安装;
- 源码加载:
git clone https://gitcode.com/GitHub_Trending/ca/cat-catch,在扩展管理页开启"开发者模式","加载已解压的扩展程序"选中该目录; - crx:从 Releases 下载后拖入扩展管理页(需开发者模式)。 预期结果:工具栏出现猫抓图标,图标数字角标随嗅探数量增长。
第一次嗅探4. 打开任意带视频的网页,让视频播放几秒,点击工具栏图标。预期结果:面板按标签页分组列出捕获资源(视频、m3u8、音频、json……)。 5. 勾选目标条目点"下载所选"。预期结果:文件按替换标签生成的文件名保存到下载目录;若资源无文件名,2.5.8 起会尝试用页面标题命名。
想玩深一点6. 快捷键:设置 → 快捷键,为启用/暂停嗅探、捕获、预览绑定全局键(2.4.0 起)。 7. 自动化管道:设置里配置 aria2 RPC(填密钥、Cookie,2.7.0 起可指定下载目录)或 MQTT 主题,把大文件交给本地 aria2/NAS 稳定落地;无协议的程序可用"调用本地程序"(2.5.3)。 8. 外观与过滤:设置页填入自定义 CSS 直接改面板样式(2.4.0);过滤大小支持表达式写法,如>100 KB(2.6.8)。 9. 手机环境:Edge Android 可扫码安装(README 提供二维码),2.6.1 起有手机适配。
原理深潜:两处值得借鉴的工程取舍
取舍一:用"心跳"换常驻后台。Manifest V3 的后台是 Service Worker(一种事件驱动、空闲即被浏览器强制回收的后台进程),空闲约 5 分钟即终止——后台一死,嗅探就漏抓。猫抓的方案(1.0.24 引入心跳,2.0.0 完善自我唤醒)是让内容脚本与后台维持一条名为HeartBeat的端口连接,每 250000 毫秒(4 分 10 秒)断开、页面重连,把后台"顶"在休眠线以内:
chrome.runtime.onConnect.addListener(function (Port) { if (Port.name !== "HeartBeat") return; Port.postMessage("HeartBeat"); const interval = setInterval(function () { clearInterval(interval); Port.disconnect(); }, 250000); });(摘自 js/background.js)
动因是功能完整性:替代方案是把监听搬进内容脚本,但那会失去跨页面全局视角与请求头访问能力,代价更大。放弃的则是健壮性——这依赖浏览器"有活跃端口连接就不杀"的隐式行为,作者本人在 2.0.0 更新记录里称之为"肮脏的手段",Chrome 策略一变即可能失效。
取舍二:storage.session 换 IO 稳定性。2.5.3 起数据存取从storage.local(落盘、重启仍在)切到storage.session(内存中、随会话消失),代码注释直书目的:"减少 IO 错误导致扩展无法使用"。后台再用chrome.alarms定时把内存缓存写回(chrome.storage.session ?? chrome.storage.local),低版本 Chrome 自动回退。放弃的是崩溃/重启后的嗅探历史,换来的是长时间浏览下扩展"活下来"的概率。
边界清单:它不能做什么
先说明确不做的事:
- DRM 内容:不处理 Widevine 等 DRM 解密;受版权保护内容的下载责任由使用者自行承担(README 免责条款)。
- YouTube:2.4.3 起移除专属支持,官方建议改用缓存捕捉。
- 嗅探上限:每标签页最多 9999 条资源(2.5.9);被动嗅探对 WebRTC/脚本内地址天然失明,需脚本兜底。
- 一次性 URL:缓存读取(2.7.0)只是缓解手段,密钥类资源仍依赖深度搜索命中率。
- 平台降级:夸克浏览器缺少
chrome.downloadsAPI,js/polyfill.js 用<a download>模拟,代价是无法监听下载状态、无法判断失败;侧边栏模式需 Chromium 114+(114 以下注入空实现)。
平台兼容一览:
| 维度 | 支持情况 | 说明 |
|---|---|---|
| Chrome / Edge(Chromium) | 93+(manifest 最低要求) | 完整功能需 104+(storage.session);侧边栏需 114+ |
| Firefox | 113+(strict_min_version) | 2.5.7 起升级 MV3;深度搜索、缓存捕捉等脚本功能需 128+;无侧边栏 |
| Edge / 夸克 Android | 支持 | 2.6.1 手机适配;夸克部分功能降级(下载 API 缺失) |
| Safari | 不支持 | 无对应构建 |
| 网页范围 | http/https://*/* | 内容脚本匹配全部网页(manifest.json) |
与替代方案的关系
三者是互补而非替代:
| 方案 | 形态 | 能做什么 | 局限 |
|---|---|---|---|
| 浏览器 F12 手动查看 | 内置开发者工具 | 查看单条请求、手动复制 URL | 无自动筛选,无合并/解密/录制 |
| 猫抓 cat-catch | 浏览器扩展 | 嗅探 + m3u8 解析解密合并 + WebRTC 录制 + 后处理管道 | 依赖浏览器环境,大文件受浏览器进程约束 |
| N_m3u8DL-CLI | 命令行工具 | m3u8 高稳定性下载 | 需先拿到地址,无嗅探与录制能力 |
猫抓通过m3u8dl://协议(2.0.0 起)可直接调用 N_m3u8DL-CLI 或本地程序(2.5.3),正是把"找到并预处理"与"大文件稳定落地"串起来的通道。选择建议:偶尔存个网页视频,用猫抓嗅探列表即可;批量处理 m3u8 直播,走"猫抓 → aria2/N_m3u8DL-CLI"管道最稳。
项目现状
当前版本2.7.2(manifest.json),近期更新集中在 m3u8 解析器:2.7.0 数据预处理(切片剔除图片数据)与缓存读取、2.7.1 下载失败自动重试、2.7.2 隐藏下载成功切片。更新节奏稳定,功能面持续扩张。语言覆盖已达 11 个 locale 目录(_locales/:中简/繁、英、日、韩、俄、西、葡、土、越、法),多数由社区贡献。许可协议为GPL-3.0(1.0 版为 MIT,2.0 版起改为 GPL v3),README 明确要求基于其源码的扩展保持开源——这是针对"山寨上架加广告"问题的直接回应,安装时请以官方渠道为准,避免装到带广告代码的伪猫抓。构建流程由 justfile 管理(just build出 crx/zip)。
入门动作
- 新手:应用商店安装 → 播一段视频 → 点开面板下载第一条资源;
- 进阶用户:遇到 m3u8 进解析器页面,把下载任务配置给 aria2,形成"网页 → NAS"管道;
- 开发者:读 js/background.js 的 HeartBeat 实现与 js/polyfill.js 的降级层,看一个扩展如何与浏览器进程管理周旋。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考