我试图通过套接字IO隧道连接chrome的远程调试端口。
在Chrome运行的地方,我有一个nodeJS脚本,它将数据套接字IO(base 64编码)传输到chrome&反之亦然:
var net = require('net');
chat.on('rdp-data', function(rdpData) {
var client = net.Socket();
client.connect(9222, '127.0.0.1', function() {
console.log('rdp-data', new Buffer(rdpData.data, 'base64').toString('utf8'));
client.write(new Buffer(rdpData.data, 'base64').toString('utf8'));
});
// when we get packets back from the client
client.on('data', function(data) {
// write those packets back to the server
//sock.write(data);
console.log('rdp-data-reply' + rdpData.request);
chat.emit('rdp-data-reply' + rdpData.request, new Buffer(data).toString('base64'));
console.log('sent2 ',new Buffer(rdpData.data, 'base64').toString('utf8'));
});
// Add a 'close' event handler to this instance of socket
client.on('close', function(data) {
console.log('CLOSED: ');
});
client.on('error', function(data) {
console.log('error: ',data);
});
});
在另一台机器上,我有一个可监听9222的nodeJS脚本,并将数据传输到&来自套接字IO:
net.createServer(function(sock) {
// We have a connection - a socket object is assigned to the connection automatically
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
var request = Math.random();
console.log('addListner rdp-data-reply'+request);
connectedDeviceSockets[IDdata.sn].on('rdp-data-reply' + request, function (data) {
console.log('rdp data reply ' + request, new Buffer(data, 'base64').toString('utf8'));
sock.write(new Buffer(data, 'base64').toString('utf8'));
});
sock.on('data', function(data) {
connectedDeviceSockets[IDdata.sn].emit('rdp-data', {
data: new Buffer(data).toString('base64'),
request: request
})
});
// Add a 'close' event handler to this instance of socket
sock.on('close', function(data) {
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});
sock.on('error', function(data) {
console.log('ERROR: ' + data);
});
}).listen(9222, '0.0.0.0');
console.log('Server listening on 9222');
这一切都很完美,我可以在我的浏览器中加载另一台机器上的远程调试端口。所有HTML,JS& CSS加载。但是当devtools尝试执行ws://请求时,它会失败&我的隧道没有记录任何东西。如果我同时杀死nodeJS&设置一个ssh -L
的隧道,一切都很完美。
我也尝试使用net
套件的套接字,它运行正常,示例就在这里 - https://github.com/joshribakoff/devtools-proxy
我认为问题与尝试通过websocket隧道连接websocket有关(因为devtools使用websockets本身)。但是为什么我的脚本与使用SSH管道流量有什么不同?
我还发现了一些暴露CLI的npm模块来执行此操作,但我想在我的应用程序中重用现有的socketIO连接,而不是shell连接到另一个连接。
我尝试添加日志记录,但是我找不到任何与ws:// request devtools make相关的内容。这是我在运行devtools的页面上运行devtools的截图。除websocket外,所有资产都通过代理加载。