我正在尝试使用 Renci SSHNet 库创建一个供我个人使用的 SSH 客户端,但我完全不确定我应该如何解释终端中执行命令的输出。
例如,如果我要键入“ls -l”、“cd/root”或“dir”等简单命令,输出字符串将按预期显示在我的 Windows 控制台窗口中。
但是当我试图说使用“nano”编辑文件或使用“top”查看 cpu/内存使用情况时,基本上任何应该显示静态文本的东西,我都会从 ssh 主机得到一堆像这样的 blob。
←[?1049h←[1;24r←(B←[m←[4l←[?7h←[?12l←[?25h←[?1h←=←[?1h←=←[?1h←=←[39;49m←[39;49m←
(B←[m←[H←[2J←(B←[0;7m GNU nano 2.2.6 File: test
←[23d^G←(B←[m Get Help ←(B←[0;7m^O←(B←[m WriteOut ←(B←[0;7m^R←(B←[m Read File
←(B←[0;7m^Y←(B←[m Prev Page ←(B←[0;7m^K←(B←[m Cut Text ←(B←[0;7m^C←(B←[m Cur Po
←[24d←(B←[0;7m^X←(B←[m Exit←[14G←(B←[0;7m^J←(B←[m Justify ←(B←[0;7m^W←(B←[m Wh
ere Is ←(B←[0;7m^V←(B←[m Next Page ←(B←[0;7m^U←(B←[m UnCut Text←(B←[0;7m^T←(B←[
←[3d Spell
所以我想我的问题是我应该如何解释所有这些?我只需要有人为我指明正确的方向。
最佳答案
当程序显示“静态文本”或以其他方式控制整个终端显示时,它实际上是使用隐藏的控制字符(如 blob 中显示的那些)将命令打印到终端。请参阅答案 here 。 ncurses
等库通过从 terminfo 获取有关主机终端的信息,为终端控制提供可移植的 API。
在您的项目中,我想您必须获得某种主机命令序列的字典并过滤或解释它们以在打印到客户端的终端时正确显示。您可以查看 colorama 项目,该项目将 ANSI 命令序列转换为 Win32 调用以正确控制 Windows 命令终端。但那是针对 Python 的,我对此一无所知。
关于c# - 解释 SSH 输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20319505/