2017-10-14 153 views
0

我有一個整潔的小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); 

回答

1

如果遠程主機是圍繞移動你的鼠標,它可能與ANSI轉義代碼做這件事。如果是這樣,Esc[2J是清屏轉義代碼。

Here are the rest of escape codes

相關問題