Javascript socketIO上方的隧道腹板

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

我正在尝试通过套接字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);
        });
    });
在另一台机器上,我有一个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等。这不会发生在您的隧道上。