尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

猫抓Cat-Catch浏览器资源嗅探扩展深度解析:藏在沙盒里的媒体处理平台

猫抓Cat-Catch浏览器资源嗅探扩展深度解析:藏在沙盒里的媒体处理平台 猫抓Cat-Catch浏览器资源嗅探扩展深度解析藏在沙盒里的媒体处理平台【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch视频网站播放时你右键另存为只能拿到一个几十字节的 m3u8 清单文件用开发者工具翻遍 Network 面板几百条请求里找不到真正的媒体流。这正是猫抓Cat-Catch要解决的核心问题——作为一款开源的浏览器资源嗅探扩展它能在严格的浏览器安全限制下把页面里隐藏的媒体资源完整捞出来并顺手完成解析、合并与下载。一张能力版图看懂猫抓在做什么 ️猫抓不是单一的嗅探工具而是一条完整的媒体处理链。用一句话概括凡是页面加载过的媒体它都能找到凡是找到的媒体它都能下载。猫抓能力版图 ├── 捕获层webRequest 请求拦截 MediaSource 方法代理 iframe 深度嗅探 ├── 解析层M3U8 解析器 MPD(DASH) 解析器 AES-128 解密识别 ├── 加工层TS→MP4 合并、切片级选择、在线 FFmpeg 转发 ├── 输出层本地下载 StreamSaver 流式存储 aria2 RPC MQTT 推送 └── 扩展层深度搜索、录制脚本、媒体控制、多语言(10种)它适合三类人被 DRM 或加密流困扰的普通用户、需要批量归档视频的媒体从业者以及想研究浏览器扩展极限的开发者。核心逻辑分布在 js/background.js 与 catch-script/catch.js 两个文件中。核心结论猫抓的本质是在浏览器允许的 API 边界内自建了一条媒体发现-解析-输出流水线。猫抓的主弹出界面捕获列表与操作入口一目了然双阶段嗅探为什么一次请求要听两遍 普通嗅探器只在请求发出时看 URL但这会漏掉大量情况真实媒体地址藏在响应头里、由 JavaScript 动态拼接、或者要等服务器返回 Content-Type 才能确认类型。猫抓的处理是听两遍单次资源请求的监听链路 ├── onSendHeaders请求发出前 │ ├── 正则匹配 URL命中黑名单则拉黑 │ └── 缓存完整请求头备用 │ └── onResponseStarted收到首个响应字节 ├── 拿回缓存请求头拼齐上下文 ├── 结合 Content-Type 判定媒体类型 └── 进入 findMedia() 分析管线这个设计在 js/background.js 中体现得很清楚// 请求发出前先看 URL 与请求头 chrome.webRequest.onSendHeaders.addListener( function (data) { G.requestHeaders.set(data.requestId, data.requestHeaders); findMedia(data, true); // 第一遍正则初筛 }, { urls: [all_urls] }, [requestHeaders]); // 收到响应后此时信息最全再做最终判定 chrome.webRequest.onResponseStarted.addListener( function (data) { data.allRequestHeaders G.requestHeaders.get(data.requestId); findMedia(data); // 第二遍类型确认 }, { urls: [all_urls] }, [responseHeaders]);配合请求失败时的onErrorOccurred清理缓存避免内存泄漏。而面对不走 HTTP 的流媒体比如 MSE 喂给video的分段数据猫抓在 catch-script/catch.js 里直接代理MediaSource的方法把浏览器内部的数据通路也纳入监听。核心结论嗅探的准确性不取决于单一 API而取决于把请求生命周期切成几个观测点、并在信息最完整的时刻做判断。沙盒里的生存术让 Service Worker 别睡着 ⏰MV3 最大的变化是后台脚本变成 Service Worker5 分钟不活跃就被浏览器强制终止状态全部丢失。对持续监听请求的扩展来说这是致命伤。猫抓的解法是两条腿走路Service Worker 保活决策 ├── 方案AwebNavigation 空监听 │ ├── 原理导航事件会唤醒 SW │ └── 代价仅在页面跳转时生效 │ ├── 方案BHeartBeat 长连接 │ ├── 原理content script 建立端口定时 ping-pong │ └── 代价需管理端口生命周期 │ └── 方案C定时器轮询 ├── 原理setInterval 调用平台 API 保持活跃 └── 猫抓采用ABC 组合每 25 秒调用一次// HeartBeat 机制content script 主动维持端口存活 chrome.runtime.onConnect.addListener(function (Port) { if (Port.name ! HeartBeat) return; Port.postMessage(HeartBeat); // 双向心跳 const interval setInterval(() { clearInterval(interval); Port.disconnect(); // 250秒后主动断开 }, 250000); }); setInterval(chrome.runtime.getPlatformInfo, 25 * 1000);更聪明的是findMedia入口的自愈逻辑每次处理请求前先检查全局状态是否初始化完毕若 SW 刚被杀死重启就延迟 500ms 重试等数据恢复后再工作。被杀死不可怕可怕的是死而复生后不认识自己了——猫抓为此在每次唤醒后都做了状态自检。核心结论在 MV3 下做长驻任务核心不是对抗休眠而是设计好唤醒后的自恢复协议。性能与体验的平衡术6 线程背后的算账 ⚖️下载 M3U8 时线程开多了会压垮服务器、开少了浪费带宽。猫抓把默认值设在 6这不是拍脑袋——在 js/init.js 里M3u8Thread: 6用户可调。核心下载器 js/m3u8.downloader.js 的实现体现了克制方案优势代价适用场景取舍结论单线程顺序下载服务器压力最小速度慢长视频等待久低配服务器保底方案无上限并发速度最大化易触发限流/封IP高带宽自建源不可取固定 6 线程速度与友好度的折中需动态调优通用场景猫抓默认线程重试联动成功率更高逻辑复杂度上升不稳定网络2.7.1 起引入两个细节值得注意一是MAX_RETRIES 3的失败重试2.7.1 版本专门为此提升了下载成功率二是大文件绕过策略——超过 1.8GB 的文件Chrome 下载 API 的隐性瓶颈自动切换 StreamSaver 边下边写不占内存// 超过 1.8G 自动启用流式下载绕过浏览器内存瓶颈 if (estimateFileSize G.chromeLimitSize confirm(文件超过2G切换流式下载)) { fileStream createStreamSaver(_fragments[0].url); // 边下边存 }核心结论并发数不是越大越好而是让服务器、带宽、成功率三者同时可接受的最大公约数。版本故事从 1.0 的嗅探器到 2.7 的媒体平台 猫抓的演进史在 CHANGELOG.md 里写得很清楚几个关键节点1.0 时代MIT 许可只做基础嗅探。功能单一胜在简单可靠。2.0 时代改 GPL-3.0 许可理由是希望使用猫抓源码的扩展仍然保持开源——这是开源生态的明确表态。2.4.x调整下载线程策略m3u8 下载更稳。2.6.x引入 MQTT 推送与在线 FFmpeg 转发把下载器升级成分发器——媒体可以发到本地程序、发到云端、发到自己的服务器。2.7.x俄语、韩语、越南语翻译相继合入右键菜单、切片级选择、AES 密钥深度搜索等细节功能补全。路线图背后是一条清晰的判断嗅探是入口解析是护城河输出通道的多样性才是用户粘性。这也是为什么它从捕获→列表的简单工具长成了捕获→解析→转码→分发的平台。M3U8 解析器的切片列表与下载控制台是平台化演进的代表性界面核心结论把下载这一个动词拆成发现、解析、转码、分发四个动词工具的边界就打开了。开源生态十种语言背后的协作机制 猫抓的国际化和模块化做得很实在。_locales/下躺着 10 种语言的 messages.json 文件翻译贡献者只需要改 JSON不需要理解任何代码——这是典型的低门槛协作设计。配合工具脚本 tools/sync-locales.js 做语言文件的同步检查避免翻译缺失。生态的另一面是外接能力支持 aria2 RPC、自定义协议唤起本地下载器如 m3u8dl、MQTT 推送、在线 FFmpeg 转码。第三方服务地址、MQTT Broker 全部可配置等于把扩展做成了媒体中控台。2.6.9 之后还支持了 Firefox 与 Android跨平台覆盖面逐步补齐。多语言 M3U8 分析界面社区翻译直接决定产品触达范围核心结论开源项目的生态力一半取决于架构是否允许外部低成本接入一半取决于翻译这类协作门槛有多低。收束三条可以带走的方法论 回到开篇的场景——你在播放器里看到了视频但看到和拿到之间隔着一整条技术链路。猫抓把这条链路走通了也为浏览器扩展开发留下了三条可迁移的经验方法论一把平台限制当成接口契约而不是障碍。Service Worker 会死、storage 有容量上限、下载 API 有大小限制——猫抓不是对抗这些限制而是围绕它们设计自恢复协议、session 存储回退、流式下载分流。限制反而成了架构的边界条件让设计更清晰。方法论二信息完整性决定功能上限。双阶段嗅探的本质是在对的时间点获取对的信息。任何为什么功能做不到的问题先问是不是信息拿得不够全往往比直接上更重的方案更有效。方法论三默认参数要能讲出理由。6 线程、3 次重试、1.8G 阈值每个默认值背后都有可验证的依据。好的默认参数是产品对用户的第一次承诺也是团队技术判断力的外显。核心结论真正复杂的设计不是堆功能的复杂度而是让每个简单参数背后都站着一个经过权衡的理由。猫抓证明了浏览器扩展完全可以承载媒体处理平台级别的野心——只要你在沙盒里足够诚实诚实地观测、诚实地权衡、诚实地把每个默认值背后的账算给用户看。【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表