什么是用nodejs和powershell清除telnet流的正确方法?

问题描述:

我有一个整洁的小nodejs脚本以文本模式(主要是telnet)登录到原始套接字。我注意到有些服务器会发送打印重定位,但我的程序必须忽略某种类似的cls等效;因为重新定位的文本只是简单地打印现有文本,留下新旧输出的乱码。如何接受和处理任何telnet字符序列用于清除以下程序的输出?什么是用nodejs和powershell清除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是清屏转义代码。

Here are the rest of escape codes