如何以无法检测到的方式读取Chrome扩展或Firefox附加组件中网页的WebSocket框架?
Inspect WebSockets frames from a Chrome Dev Tools extension提出了类似的问题,但是开发NPAPI插件不再有意义,因为它将很快被删除。
最佳答案
Rob W的方法还有另一种方法,可以完全掩盖与页面的任何交互(Chrome的,)
即,您可以取出一些重型大炮并使用 chrome.debugger
。
请注意,使用它会阻止您打开有问题的页面的开发工具(或者更确切地说,因为只有一个调试器客户端可以连接,所以打开开发工具将使其停止工作)。由于以下原因,此功能得到了改进:可以附加多个调试器。
这是一个相当低级的API。您需要自己使用debugger protocol构建查询。另外,相应的事件不在1.1文档中,您需要查看development version。
您应该能够接收到类似的WebSocket事件并检查它们的payloadData
:
{"method":"Network.webSocketFrameSent","params":{"requestId":"3080.31","timestamp":18090.353684,"response":{"opcode":1,"mask":true,"payloadData":"Rock it with HTML5 WebSocket"}}}
{"method":"Network.webSocketFrameReceived","params":{"requestId":"3080.31","timestamp":18090.454617,"response":{"opcode":1,"mask":false,"payloadData":"Rock it with HTML5 WebSocket"}}}
This extension sample应该提供一个起点。
实际上,这是一个起点,假设
tabId
是您感兴趣的选项卡:chrome.debugger.attach({tabId:tab.id}, "1.1", function() {
chrome.debugger.sendCommand({tabId:tabId}, "Network.enable");
chrome.debugger.onEvent.addListener(onEvent);
});
function onEvent(debuggeeId, message, params) {
if (tabId != debuggeeId.tabId)
return;
if (message == "Network.webSocketFrameSent") {
// do something with params.response.payloadData,
// it contains the data SENT
} else if (message == "Network.webSocketFrameReceived") {
// do something with params.response.payloadData,
// it contains the data RECEIVED
}
}
我已经测试了这种方法(上面修改了链接的示例),并且可以正常工作。
关于javascript - 以无法检测的方式检查WebSocket框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31181651/