使用nodejs和powershell清除telnet流的正确方法是啥?
Posted
技术标签:
【中文标题】使用nodejs和powershell清除telnet流的正确方法是啥?【英文标题】:What is the proper way to clear telnet streams with nodejs and powershell?使用nodejs和powershell清除telnet流的正确方法是什么? 【发布时间】:2018-03-26 05:46:37 【问题描述】:我有一个简洁的 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);
【问题讨论】:
【参考方案1】:如果远程主机正在移动您的光标,则可能是使用 ANSI 转义码。如果是这样,Esc[2J
就是清屏转义码。
Here are the rest of escape codes.
【讨论】:
以上是关于使用nodejs和powershell清除telnet流的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
powershell Powershell:清除Windows事件日志