Ss hNet Считать первое сообщение хоста с ShellStream - PullRequest
0 голосов
/ 22 февраля 2020

У меня проблемы с обработкой вывода Ss hNet ShellStream. Вот мой код:

        Dim shellStream As Stream = sshConnection.CreateShellStream("main", 100, 30, 800, 600, 4096)
        Dim result(4096) As Byte
        shellStream.Read(result, 0, 0)

        Dim welcomeMessage As String = Encoding.UTF8.GetString(result)
        log(welcomeMessage)

"sshConnection" - это мой SshClient, который успешно подключается. «log» - это просто мой метод вывода, который записывает мои результаты в текстовое поле и в консоль. В то время как консоль полна вопросительных знаков, текстовое поле вообще ничего не показывает. Я видел разные подходы к чтению ShellStream, и я также попробовал несколько из них (для меня это не имело никакого значения, когда я использовал Dim shellStream as ShellStream, и я также пытался использовать SreamReader для объекта Stream).

Поэтому мне интересно, может ли это быть вызвано не моим подходом, а тем фактом, что ShellStream начинает собирать ответы хоста только после того, как он был создан, что означало бы отсутствие вывода уже. Если это так, я хотел бы знать, как перехватить самое первое сообщение, которое посылает хост, когда вы обычно подключаетесь к нему через CUI. Мне нужно сообщение, чтобы убедиться, что соединение s sh установлено с указанным типом c сервера.

Если моя идея полностью неверна, скажите, пожалуйста, как правильно читать ShellStream.

Заранее спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Я нашел решение. Поскольку SshClient.CreateShellStream имеет тот же эффект, что и подключение через клиент S SH с вашего компьютера, вы можете прочитать самое первое сообщение с этим потоком. Вот некоторый рабочий код:

Dim sshConnection As SshClient = New SshClient(New ConnectionInfo(hostname, port, username, New PasswordAuthenticationMethod(username, password)))
Dim shellStream As ShellStream = sshConnection.CreateShellStream("terminal", 150, 500, 800, 500, 8192)
Dim reader As StreamReader = New StreamReader(shellStream)
Dim writer As StreamWriter = New StreamWriter(shellStream)
Dim cmd As String = "someCommand"
writer.WriteLine(cmd)
writer.Flush()

Thread.Sleep(500)

Dim line As String = ""
For i As Integer = 0 To 150

     response += line
     line = reader.ReadLine
     response += vbCrLf

 Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...