在 NodeJS 中连接到远程登录服务器

Posted

技术标签:

【中文标题】在 NodeJS 中连接到远程登录服务器【英文标题】:Connecting to a telnet server in NodeJS 【发布时间】:2018-04-18 18:38:50 【问题描述】:

这里有一个特定的设备只能通过 telnet 进行控制,我已经做了一段时间了(通过 PuTTy 或终端)。

在 NodeJS 中,我创建了一个 Web 界面,可以更轻松地控制设备。我通过为通过 telnet 发送的不同命令运行不同的 bash 脚本来做到这一点。这工作正常,但感觉太杂乱无章,更不用说每个命令的 shell 脚本混乱了。我正在寻找更好的方法。

我想直接从 NodeJS 连接到 telnet 服务器。我尝试了不同的软件包(即 net、telnet-client、telnet-stream、another-telnet-client 等),但要么这些不是我需要的工具,要么我没有正确实现它。

这是我正在使用 telnet-client 包测试的示例代码(其他只是此代码的变体):

const telnet = require('telnet-client');
const server = new telnet();

// display server response
server.on("data", function(data)
    console.log(''+data);
);

// login when connected
server.on("connect", function()
    server.write("login <user> <pass>");
);

// connect to server
server.connect(
    host: "172.16.0.1",
    port: 9600
);

手动完成后,在“登录”请求之后,我应该会看到“登录成功”消息,但我没有收到任何回复。

这段代码不正确吗?我不熟悉 telnet,非常感谢任何帮助。

【问题讨论】:

通过查看 telnet-client 库,我怀疑它是为 unix shell 登录而构建的。另外,我在那个包中找不到server.write 方法。如果看起来您正在通过自定义协议进行通信,则应该考虑仅在该地址上打开一个 tcp 套接字。 Here's an example. 从该软件包的文档看来,您应该在编写登录行之前等待服务器 ready 事件。看一下包示例github.com/mkozjak/node-telnet-client 你好尼克隆!有效!非常感谢!显然,根据 Sami Hult 的原始建议,在 write 函数的末尾添加“\r\n”也是必要的。谢谢你们! 您好,您能解释一下您是如何连接到 telnet-client 服务器并启动登录的吗?我从 npm telnet-client 站点复制了示例代码,但每次我运行命令 node server.js(我有代码的文件)时,我都会收到一个错误的连接被拒绝错误。您如何连接到 telnet-client 并开始聊天会话? 我最终只使用了net 模块而不是telnet-client。我发现它更容易使用。不过,我不确定连接被拒绝错误。确保您指向正确的 IP 和端口。 【参考方案1】:

只是将答案写在这里,以防万一有人遇到同样的问题。

我的问题是通过在我发送到服务器的字符串末尾添加回车和换行来解决的。

server.write("login <user> <pass>\r\n");

【讨论】:

【参考方案2】:

试试这个代码,只需替换你的 telnet 服务器的 IP 地址和端口号

var TelnetSocket, net, socket, tSocket;

net = require("net");

(TelnetSocket = require("telnet-stream"));


socket = net.createConnection(23, "127.0.0.1");


tSocket = new TelnetSocket(socket);


tSocket.on("close", function() 
  return process.exit();
);


tSocket.on("data", function(buffer) 
  return process.stdout.write(buffer.toString("utf8"));
);


tSocket.on("do", function(option) 
  return tSocket.writeWont(option);
);


tSocket.on("will", function(option) 
  return tSocket.writeDont(option);
);


process.stdin.on("data", function(buffer) 
  return tSocket.write(buffer.toString("utf8"));
);


【讨论】:

以上是关于在 NodeJS 中连接到远程登录服务器的主要内容,如果未能解决你的问题,请参考以下文章

在 Ubuntu 中连接到远程调试器时超时

如何允许root用户远程登录?

如何允许root用户远程登录?

SQL2000无法远程登录

终端命令SSH服务,远程登录

如何远程登录到局域网中的计算机