gpt4 book ai didi

在为 Node.JS 编写的非常低级别的 TCP 服务器上进行身份验证?

转载 作者:可可西里 更新时间:2023-11-01 02:56:29 24 4
gpt4 key购买 nike

如何在为 Node.JS 编写的 TCP 服务器中实现类似于 HTTP 基本身份验证的功能?基本 TCP 服务器的代码如下:

// Load the net module to create a tcp server.
var net = require('net');

// Setup a tcp server
var server = net.createServer(function (socket) {

// Every time someone connects, tell them hello and then close the connection.
socket.addListener("connect", function () {
console.log("Connection from " + socket.remoteAddress);
socket.end("Hello World\n");
});

});

// Fire up the server bound to port 7000 on localhost
server.listen(7000, "localhost");

// Put a friendly message on the terminal
console.log("TCP server listening on port 7000 at localhost.");

最佳答案

虽然有多种方法可以通过 TCP 连接提供身份验证,但都需要某种形式的“协议(protocol)”作为商定的通信语法/句法。

例如,在简单邮件传输协议(protocol)中,会发生以下对话(其中 S: 和 C: 分别指定由 SMTP 服务器和电子邮件客户端提供的行):

S: 220 server.example.com
C: HELO client.example.com
S: 250 server.example.com
C: MAIL FROM:<sender@example.com>
S: 250 2.1.0 sender@example.com... Sender ok
C: RCPT TO:<recipient@example.com>
S: 250 recipient <recipient@example.com> OK
C: DATA
S: 354 enter mail, end with line containing only "."
C: full email message appears here, where any line
C: containing a single period is sent as two periods
C: to differentiate it from the "end of message" marker
C: .
S: 250 message sent
C: QUIT
S: 221 goodbye

在来自服务器的回复中,初始数值表示所请求操作的成功或失败,或者回复包含信息性消息。使用三位数字值可以进行高效解析,因为所有以 2xx 开头的回复都表示成功,3xx 是信息性的,4xx 表示协议(protocol)错误,而 5xx 是为服务器错误保留的。请参阅 IETF RFC 5321 - https://www.rfc-editor.org/rfc/rfc5321完整协议(protocol)。

因此在您的特定情况下,您可能会考虑一些简单的事情:

[connect to TCP server]
S: ? # indicates the server is ready for authorization

C: username password # send authentication credentials

然后服务器会回复:

S: !                    # indicates successful authentication and 
# that server is ready for more commands

或者

S: ?                    # indicates authentication failure

如果看到太多失败的身份验证尝试,服务器可能会切断连接以减少滥用的可能性,例如 DDOS 攻击。

一旦通过身份验证,客户端可以发送:

C: >                    # begin streaming

或您支持的任何其他命令。

关于在为 Node.JS 编写的非常低级别的 TCP 服务器上进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133648/

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