gpt4 book ai didi

node.js - 从 Node.js 中的 https.Server#clientError 获取 remoteAddress

转载 作者:搜寻专家 更新时间:2023-10-31 23:21:39 24 4
gpt4 key购买 nike

在 Node.js 中 http.Serverhttps.Server发出 clientError事件但具有不同的参数:
http.Server#clientError(exception, socket)
https.Server#clientError(exception, securePair)

securePair作为 tls.SecurePair 的实例, securePair.cleartext一个tls.CleartextStreamsecurePair.encrypted一个tls.CryptoStream .

问题是:如何获取导致 clientError 的客户端的地址和端口? ?理论上,这应该有效:
socket = securePair.cleartext.socket;
console.log(socket.remoteAddress + ':' + socket.remotePort);

实际上,当我尝试使用 HTTP(假装它是 HTTP 服务器)连接到 HTTPS 服务器并在几秒钟后取消时,我得到一个 clientError类型 ECONNRESET ,但是socket.remoteAddresssocket.remotePort都是undefined (即使 securePair.cleartext.socket 确实是 net.Socket 而不是 undefined )。

最佳答案

不幸的是,赏金似乎没有多大帮助:-(我不得不自己调查。

显然,已经进行了修复(但尚未在任何已发布的 node.js 中修复)以便即使在关闭套接字后也能够获取这些值:https://github.com/joyent/node/commit/8c38b07252d86f4eef91344f8df4f0c3e38bca35

解决方法是在连接时存储地址:

srv.on('connect', function (socket) {
socket.stored_remoteAddress = socket.remoteAddress;
});
srv.on('clientError', function (err, socket) {
console.log(socket.cleartext.socket.stored_remoteAddress);
}

这可行,但并不漂亮。


显然,即使这样也不能完全工作:-(

Node.js 0.11 不会在 SSL 错误时发出“clientError”事件(例如),因此无法捕捉到那里的情况。

Node.js 0.12 发出 'clientError' 事件,但使用了新的 TLS 实现,它不再有可用的 'cleartext' 套接字。我找不到任何方法将信息从“connect”事件传递到“clientError”事件,也找不到任何方法来确定它们是用于同一个套接字(因为套接字已经在“clientError”事件中关闭)。

因此,似乎唯一的方法是等待新的 Node.js 版本(最早是 0.12.2,如果他们认为这值得修复)并希望它得到真正的修复。

关于node.js - 从 Node.js 中的 https.Server#clientError 获取 remoteAddress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257709/

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