使用 nodejs 和 powershell 清除 telnet 流的正确方法是什么?
What is the proper way to clear telnet streams with nodejs and powershell?
我有一个简洁的小 nodejs 脚本,用于以文本模式(主要是 telnet)登录原始套接字。我注意到有些服务器会发送打印重定位,但我的程序一定忽略了某种 cls
等价物;因为重定位的文本只是在现有文本上打印,留下新旧输出的乱码。我如何接受和处理任何用于使用以下程序清除输出的 telnet 字符序列?
var net = require("net");
var argv = process.argv.slice(2);
var client = null;
var echo = false;
var hostName = null;
var port = null;
var charSet = "utf-8";
var init = function(print, error, quit, argv, keyboard, argParser) {
argv.forEach(argParser);
checkVars();
client = new net.Socket();
client.on("data", print);
client.on("error", error);
client.on("close", quit);
client.connect(port, hostName, function() { });
process.stdin.resume();
process.stdin.setRawMode(true);
process.stdin.setEncoding(charSet);
process.stdin.on("data", keyboard);
};
var print = function(text) {
process.stdout.write(text);
};
var keyboard = function(key) {
if (echo) print(key);
client.write(key);
};
var error = function(e) {
print(e.toString() + "\n");
quit();
};
var quit = function() {
print("\n");
process.exit();
};
var argParser = function(arg) {
if (arg.startsWith("echo")) echo = true;
else if(arg.startsWith("host:")) hostName = arg.split(":")[1];
else if (arg.startsWith("port:")) port = parseInt(arg.split(":")[1]);
else if (arg.startsWith("charSet:")) charSet = arg.split(":")[1];
}
var checkVars = function() {
if (hostName == null ||
port == null) {
print("\nNEVER RUN FOREIGN CODE WITHOUT FIRST READING IT\n");
quit();
}
}
init(print, error, quit, argv, keyboard, argParser);
如果远程主机在四处移动您的光标,则可能是使用 ANSI 转义码进行的。如果是,Esc[2J
就是明屏转义码。
我有一个简洁的小 nodejs 脚本,用于以文本模式(主要是 telnet)登录原始套接字。我注意到有些服务器会发送打印重定位,但我的程序一定忽略了某种 cls
等价物;因为重定位的文本只是在现有文本上打印,留下新旧输出的乱码。我如何接受和处理任何用于使用以下程序清除输出的 telnet 字符序列?
var net = require("net");
var argv = process.argv.slice(2);
var client = null;
var echo = false;
var hostName = null;
var port = null;
var charSet = "utf-8";
var init = function(print, error, quit, argv, keyboard, argParser) {
argv.forEach(argParser);
checkVars();
client = new net.Socket();
client.on("data", print);
client.on("error", error);
client.on("close", quit);
client.connect(port, hostName, function() { });
process.stdin.resume();
process.stdin.setRawMode(true);
process.stdin.setEncoding(charSet);
process.stdin.on("data", keyboard);
};
var print = function(text) {
process.stdout.write(text);
};
var keyboard = function(key) {
if (echo) print(key);
client.write(key);
};
var error = function(e) {
print(e.toString() + "\n");
quit();
};
var quit = function() {
print("\n");
process.exit();
};
var argParser = function(arg) {
if (arg.startsWith("echo")) echo = true;
else if(arg.startsWith("host:")) hostName = arg.split(":")[1];
else if (arg.startsWith("port:")) port = parseInt(arg.split(":")[1]);
else if (arg.startsWith("charSet:")) charSet = arg.split(":")[1];
}
var checkVars = function() {
if (hostName == null ||
port == null) {
print("\nNEVER RUN FOREIGN CODE WITHOUT FIRST READING IT\n");
quit();
}
}
init(print, error, quit, argv, keyboard, argParser);
如果远程主机在四处移动您的光标,则可能是使用 ANSI 转义码进行的。如果是,Esc[2J
就是明屏转义码。