Выполнение команды с помощью S SH. NET на модеме Digi 6030dx - какие последовательности символов начинаются с левой квадратной скобки? - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть большой проект, который подключается ко многим устройствам через S SH. NET

Теперь я должен добавить поддержку нового модема, который называется digi 6030dx.

Я добавил его, и я могу без проблем подключиться

Но когда я посылаю какую-либо / любую команду, например show config, вывод:

[16C[0K
[16C[0Ks
[17C[0Kh
[18C[0Ko
[19C[0Kw
[20C[0K
[20C[0Kc
[21C[0Ko
[22C[0Kn
[23C[0Kf
[24C[0Ki
[25C[0Kg

Commands                                                    
-------------------------------------------------------------------------------
config      View and modify the configuration               
exit        Exit the CLI                                    
analyzer    Analyzer commands.                              
cli-legacy  Enter the legacy Admin CLI.                     
cp          Copy a file or directory.                       
help        Show CLI editing and navigation commands.       
ls          List a directory.                               
mkdir       Create a directory.                             
modem       Modem commands.                                 
more        View a file.                                    
mv          Move a file or directory.                       
ping        Ping a host.                                    
reboot      Reboot the system.                              
rm          Remove a file or directory.                     
scp         Copy a file or directory over SSH.              
show        Show instance statistics.                       
system      System commands.                                
traceroute  Print the route packets trace to network host.  
update      Update firmware.                                

dra.wk.0001> ashowconfigdra.wk.0001> ashowconfig
[16C[0K

Кто-нибудь знает что это за странные признаки / почему моя команда разделена этим и символами новой строки? Это первое устройство, которое имеет эту проблему, и приложение поддерживает более 200 других без проблем.

Я думаю, какая-то проблема с кодированием или что-то в этом роде? замазка не показывает эти признаки, поэтому, вероятно, как-то их «понимает»?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2020

Это Экранирующие коды ANSI .

Как правило, с S SH вы получаете их, только если ваш клиент (библиотека) заявляет о поддержке эмуляции терминала * 1006 Библиотека *.

S SH. NET делает это всегда, когда вы используете канал "shell" (SshClient.CreateShell или SshClient.CreateShellStream) .

В общем случае (если вы подключались к серверу S SH с хорошим поведением), чтобы избежать получения кодов:

  • Используйте канал "exe c" ( используйте SshClient.RunCommand). S SH. NET не использует эмуляцию терминала на канале "exe c". Хотя серверы S SH на «устройствах» (в отличие от полных серверов) обычно не реализуют канал «exe c». См. Также В чем разница между exec_command и send с invoke_shell () в Paramiko?

  • Изменить код S SH. NET, чтобы не запрашивать эмуляцию терминала для "оболочки" канала. - Удалите SendPseudoTerminalRequest запрос из Shell.Start реализации.


Хотя вы подключаетесь к какому-либо «устройству» и подключаетесь к другому устройству через telnet, и коды, вероятно, поступают из На удаленном устройстве вопрос заключается в том, будет ли это вообще влиять на это устройство. Возможно, вы не сможете избежать получения кодов. Отсутствие эмуляции терминала на первом соединении S SH, возможно, не окажет никакого влияния на второе соединение te lnet.

В конце вам, возможно, придется иметь дело с кодами.
См. Также Как извлекать управляющие коды ANSI из команды AIX topas, в результате C#.

0 голосов
/ 20 февраля 2020

я сделал на данный момент

this.answer = Regex.Replace(this.answer, @"\r\[\d{0,3}C\[0K", "", RegexOptions.IgnoreCase);

увидит, окажет ли какое-либо негативное влияние, но выглядит идеально сейчас: D

...