在 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"));
});
这里有一个特定的设备只能通过 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"));
});