簡體   English   中英

在 NodeJS 中連接到 telnet 服務器

[英]Connecting to a telnet server in NodeJS

這里有一個特定的設備只能通過 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,非常感謝任何幫助。

只是打算在這里寫答案,以防有人遇到同樣的問題。

我的問題只是通過在我發送到服務器的字符串末尾添加回車和換行來解決的。

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

試試這個代碼,只需替換你的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"));
});


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM