Javascript socketIO上方的隧道腹板
我正在尝试通过套接字IO对chrome的远程调试端口进行隧道传输 在Chrome运行的地方,我有一个nodeJS脚本,它将数据套接字IO(base 64编码)传输到Chrome,反之亦然:Javascript socketIO上方的隧道腹板,javascript,node.js,sockets,google-chrome,Javascript,Node.js,Sockets,Google Chrome,我正在尝试通过套接字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', functi
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);
});
});
在另一台机器上,我有一个nodeJS脚本,它监听9222,并将数据传输到套接字IO和从套接字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://请求时,它失败了&我的隧道不会记录任何东西。如果我杀死两个nodej并用ssh-L
设置一个隧道,那么一切都会很好地工作
我还用net
包的套接字尝试了这个方法,效果很好,下面就是这个例子-
我认为问题与尝试通过websocket隧道websocket有关(因为devtools本身使用websocket)。但是为什么我的脚本与使用SSH传输流量有什么不同呢
我还发现了一些npm模块,它们公开了一个CLI来执行此操作,但我希望在我的应用程序中重新使用现有的socketIO连接,而不是向外扩展到另一个连接
我尝试添加日志记录,但找不到与ws://请求devtools相关的任何内容。下面是我在运行devtools页面上运行devtools的一些屏幕截图。除websocket外,所有资产都通过代理加载
Uhh,socket.io已经在webSocket上运行,因此尝试在webSocket上设置隧道没有多大意义。如果你想支持webSocket连接,为什么不直接实例化一个webSocket服务器呢?而且你不必为了增加对webSocket连接的支持而去使用其他应用程序。您只需在同一nodejs进程中启动webSocket服务器(在不同的端口上)。还要记住,传入的webSocket连接有一个握手过程,该过程包括以http连接的形式开始使用,然后升级到webSocket连接,并在执行理解数据帧所需的操作时交换一些安全凭据。你支持你隧道里的一切吗?>你支持你隧道里的一切吗。。。我正在尝试构建一个protocool不可知代理/隧道,我不支持任何东西,只支持管道传输原始数据。我想做ssh-L所做的事情。不确定您在这里到底想做什么,但是ws请求要去哪里?如果发送到无效的主机名,则不会发送任何请求。SSH隧道名称解析、arp等。这不会发生在您的隧道上。嗯,socket.io已经在webSocket上运行,所以尝试在上面隧道webSocket没有太多意义。如果你想支持webSocket连接,为什么不直接实例化一个webSocket服务器呢?而且你不必为了增加对webSocket连接的支持而去使用其他应用程序。您只需在同一nodejs进程中启动webSocket服务器(在不同的端口上)。还要记住,传入的webSocket连接有一个握手过程,该过程包括以http连接的形式开始使用,然后升级到webSocket连接,并在执行理解数据帧所需的操作时交换一些安全凭据。你支持你隧道里的一切吗?>你支持你隧道里的一切吗。。。我正在尝试构建一个protocool不可知代理/隧道,我不支持任何东西,只支持管道传输原始数据。我想做ssh-L所做的事情。不确定您在这里到底想做什么,但是ws请求要去哪里?如果发送到无效的主机名,则不会发送任何请求。SSH隧道名称解析、arp等。这不会发生在您的隧道上。