这里有一个特殊的设备可以 通过telnet控制,我一直在做(通过PuTTy或终端)一段时间。
在NodeJS中,我创建了一个Web界面,可以更轻松地控制设备。我通过为通过telnet发送的不同命令运行不同的bash脚本来完成此操作。这工作正常,但感觉太无组织了,更不用说每个命令的shell脚本的混乱。我正在寻找一种更好的方法。
我想过直接从NodeJS连接到telnet服务器。我尝试过不同的软件包(例如net,telnet-client,telnet-stream,另一个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,非常感谢任何帮助。
答案 0 :(得分:5)
如果有人遇到同样的问题,请在这里写下答案。
我的问题只是通过在我发送到服务器的字符串末尾添加回车符和换行符来解决。
server.write("login <user> <pass>\r\n");
答案 1 :(得分:1)
尝试此代码,只需替换您的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"));
});