gpt4 book ai didi

node.js - Node 4.1.0 TLSSocket 问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:45 24 4
gpt4 key购买 nike

Node 中使用 TLSSocket 和 tls.connect 的奇怪行为。

var port = 7000;
var host = '94.125.182.252'; //freenode
var tls = require('tls');
var net = require('net');

var socket = new net.Socket();
var secure;

secure = new tls.TLSSocket( socket, {
isServer: false,
rejectUnauthorized: false
});

// edit (left out of original post, but present in my test code, whoops)
secure.connect( {
port: port,
host: host
});

secure.setEncoding( 'utf8' );

secure.on( 'connect' , function() {
console.log( 'connected' );
})

.on( 'secureConnect', function() {
console.log( 'secure connect' );
})

.on( 'error', function( e ) {
console.log( 'error', e );
})

.on( 'data', function( data ) {
console.log( data );
});

if ( secure.isPaused() ) {
console.log( 'socket was paused' );
secure.resume();
}

这甚至不会尝试连接,也不会产生任何错误消息。我有wireshark监控,但没有捕获任何事件。

不同的方法:

secure = tls.connect( {
rejectUnauthorized: false,
host: host,
port: port,
socket: socket
});

同样的故事,没有捕获任何内容,没有错误。如果我删除上面的 socket:socket 方面,它将连接。这是有道理的,因为文档指出,如果指定了套接字选项,它将忽略端口和主机。以上适用于我以前的 Node 版本(0.12.7)。

如果我想使用现有的套接字,我必须在调用 tls.connect 之前告诉它进行连接。

socket.connect( {
port: port,
host: host
});

secure = tls.connect( {
rejectUnauthorized: false,
socket: socket
});

这似乎不太合适。将连接套接字传递给 tls.TLSSocket(socket, ...) 似乎没有效果。'connect' 事件被触发,但我想这与 TLSSocket 无关。我无法让 tls.TLSSocket(...) 在之前的 Node 迭代中工作。单步调试 Node 并没有暴露任何明显的问题。

net.Socket([options]) 的选项似乎不接受端口或主机进行配置,直到您尝试连接,并且在传递给 tls.connect 之前尝试连接似乎违反直觉。这表明这不是预期用途。

所以我的问题是:

我对 tls.TLSSocket() 做错了什么或者可能是一个错误?

我是否正确地假设将现有套接字传递到 tls.connect() 用于已建立的连接切换协议(protocol)?如果没有,分配端口和主机的正确方法是什么?

编辑:

根据建议:

secure = tls.connect( {
rejectUnauthorized: false,
socket: socket
});


socket.connect( {
port: port,
host: host
});

这有效。

secure = new tls.TLSSocket( socket , {
isServer: false,
rejectUnauthorized: false
});

socket.connect( {
port: port,
host: host
});

不幸的是,这不起作用。会发出“connect”事件,而不会发出“secureConnect”事件,也不会发出任何其他事件或数据。

最佳答案

在前两个(非工作)示例中,您只创建了一个套接字,但从未开始实际连接它。在原始代码末尾添加 socket.connect(); ,它应该可以正常工作。

tls.connect() 当传递一个普通套接字时,实际上并不在内部调用 socket.connect();,它只是设置为开始监听数据套接字,以便它可以正确解密传入的数据。

关于node.js - Node 4.1.0 TLSSocket 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com