在 NodeJS 中连接到 telnet 服务器

Connecting to a telnet server in NodeJS

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

在 NodeJS 中,我创建了一个 Web 界面,可以更轻松地控制设备。我通过 运行 不同的 bash 脚本为通过 telnet 发送的不同命令做到了这一点。这工作正常,但感觉太杂乱无章,更不用说每个命令的 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
});

如果手动完成,在 "login" 请求后,我应该会看到一条 "login successful" 消息,但我没有收到任何回复。

这个代码有误吗?我不熟悉 telnet,非常感谢任何帮助。

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

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

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

Try this code,just replace IP address and Port Number of your telnet server

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"));
});