要在火狐浏览器中完整抓取websocket通信数据包,必须同时捕获http升级握手请求与后续帧级消息——仅靠网络面板过滤ws协议条目会漏掉关键握手细节,而只用控制台打补丁又看不到原始二进制帧结构和连接生命周期。

启用本地回环代理劫持(前提条件)
若目标WebSocket地址为ws://localhost:3000或wss://127.0.0.1,则必须先解除Firefox对回环地址的代理绕过限制,否则Burp、Fiddler等工具根本收不到GET /ws握手请求。
在地址栏输入about:config并回车→点击“接受风险并继续”→在搜索框中输入network.proxy.allow_hijacking_localhost→双击该条目,将其值由false改为true。
【关键提醒】修改后需清空“设置→网络设置→不使用代理的主机”列表中的localhost、127.0.0.1,否则配置冲突导致劫持失效。
通过网络监视器查看帧级通信
这是最直接的内置方案,适用于已建立连接且页面未被Service Worker拦截的场景。
按下Ctrl + Shift + E打开网络监视器→确保左上角红色录制按钮处于激活状态→在顶部过滤器中点击漏斗图标→勾选WebSocket复选框。
在请求列表中找到ws://或wss://开头的条目→单击该条目→切换到右侧面板的消息标签页。
此时将显示每一条收发帧的时间戳、方向箭头、载荷类型(Text/Binary)、长度及可展开的JSON树状结构。若内容为空,请刷新页面或触发一次send操作。
注入监听逻辑捕获原始数据流
当网络面板无法显示消息(如被加密封装、或使用自定义二进制协议),必须在运行时劫持WebSocket实例行为,强制将原始data输出到控制台。
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
方法一:打补丁劫持prototype(推荐用于多数现代框架)
在控制台(Ctrl + Shift + K)粘贴执行:
const originalSend = WebSocket.prototype.send;WebSocket.prototype.send = function(data) { console.log('[WS →]', data); return originalSend.apply(this, arguments); };WebSocket.prototype._originalOnMessage = WebSocket.prototype.onmessage;WebSocket.prototype.onmessage = function(event) { console.log('[WS ←]', event.data); if (this._originalOnMessage) this._originalOnMessage.call(this, event); };
方法二:重写构造函数(应对动态创建、闭包内实例)
在控制台执行:
const OriginalWebSocket = window.WebSocket;window.WebSocket = function(url, protocols) { const ws = new OriginalWebSocket(url, protocols); console.log('[WS new]', url); ws.addEventListener('open', () => console.log('[WS open]', url)); ws.addEventListener('message', e => console.log('[WS ←]', e.data)); ws.addEventListener('close', e => console.log('[WS close]', e.code, e.reason)); return ws; };
这一步生效后,所有新创建的WebSocket实例都会自动打印日志。注意:已存在的实例需手动调用ws.send()或等待服务端推送才能触发输出。
导出WebSocket帧数据
第一步:在网络监视器中选中目标WebSocket连接条目
第二步:点击右侧面板顶部的导出按钮(向下箭头图标)
第三步:选择Export as HAR或Export WebSocket frames(Firefox Developer Edition 70+支持)
导出的JSON文件包含每帧的timestamp、opcode、masked标志、payload length及base64编码的原始字节。普通版Firefox仅支持HAR导出,其中WebSocket帧以webSocketFrame字段嵌套在请求详情中。










