2014-02-20 3 views
1

Я пытаюсь автоматизировать несколько команд unix, которые необходимо выполнить на удаленном сервере unix через VB.NET. В настоящее время я бы открыл командную строку, подключился к хосту с telnet, выдать мои команды и выйти из сеанса. В рамках более крупного проекта я хотел бы автоматизировать это. Я изучал различные методы настройки сетевых подключений с VB в течение нескольких дней, и я не приближаюсь к решению. Я попытался использовать библиотеку DLL третьей стороны (как предложено здесь: executing commands on unix server via visual basic application) в качестве ссылки на мой проект, но я получаю ошибку таймаута, которую я не могу решить, пытаясь просто получить список каталогов в качестве теста.Как установить TCP-соединение с Unix-сервером с помощью VB.NET

Я пробовал кодировать его сам с помощью TcpClient, но мой код просто зависает после первого ответа (см. Код & ниже). У меня нет опыта работы с сетями, портами или сокетами, отличными от того, что я прочитал за последние несколько дней. У меня нет проблем с безопасностью в связях, я нахожусь в интранете моей компании. Любая помощь для решения проблемы была бы весьма признательна.

код: В первую очередь вырезать и вставить из MSDN VB, например, для TcpClient

Dim message As String 

    'Connect to Server 
    Dim port As Int32 = 23 
    Dim client As New TcpClient(unixServer, port) 

    'Send username to login to server 
    message = userName & " \n" 
    Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message) 
    Dim stream As NetworkStream = client.GetStream 
    stream.Write(data, 0, data.Length) 
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf) 
    data = New [Byte](256) {} 
    Dim responseData As [String] = String.Empty 
    Dim bytes As Int32 = stream.Read(data, 0, data.Length) 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes) 
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf) 

    'Send password to login to server 
    message = passWord & " \n" 
    data = New [Byte](256) {} 
    data = System.Text.Encoding.ASCII.GetBytes(message) 
    stream.Write(data, 0, data.Length) 
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf) 
    data = New [Byte](256) {} 
    bytes = stream.Read(data, 0, data.Length) 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes) 
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf) 

    'Send return key to start new line 
    message = "\n" 
    data = New [Byte](256) {} 
    data = System.Text.Encoding.ASCII.GetBytes(message) 
    stream.Write(data, 0, data.Length) 
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf) 
    data = New [Byte](256) {} 
    bytes = stream.Read(data, 0, data.Length) 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes) 
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf) 

    'Get directory listing 
    message = "ls -lrt" 
    data = New [Byte](256) {} 
    data = System.Text.Encoding.ASCII.GetBytes(message) 
    stream.Write(data, 0, data.Length) 
    TextBox2.AppendText("Sent: {0} " & message & vbCrLf) 
    data = New [Byte](256) {} 
    bytes = stream.Read(data, 0, data.Length) 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes) 
    TextBox2.AppendText("Recieved: {0} " & responseData & vbCrLf) 


    stream.Close() 
    client.Close() 

Выход в текстовое поле:

Sent: {0} имя пользователя \ п

ПОЛУЧАЛ: {0} ?? ?? ?? # ?? $

Sent: {0} пароль \ п

+0

вы не отправляете «\ n», вы отправляете vbcrlf или chr (10) в качестве возврата каретки – user2930100

ответ

0

Возможно, вам нужно только отправить Line Feed (vbLf). отправка CR+LF может привести к неожиданному поведению. Попробуйте отправить только LF (Line Feed). Это может помочь. См. Статью в Википедии: http://en.wikipedia.org/wiki/Newline#Representations

Также, это способ SSH для этого: executing commands on unix server via visual basic application.

Но, если вы предпочитаете придерживаться Telnet, который он считает менее безопасным, тогда SSH, прочитайте это: http://social.msdn.microsoft.com/Forums/en-US/bf432ec4-cfdf-44be-a34a-5fdaf8115eb1/writing-a-telnet-client-with-vb-net?forum=netfxnetcom. Вот прямая ссылка на библиотеку, о которой упоминалось в упомянутой выше ссылке: http://www.c-sharpcorner.com/UploadFile/tylerkline/TelnetScripting11282005001158AM/TelnetScripting.aspx?ArticleID=a8e0e439-14df-4d82-82ee-8cb4c110f9a0. Мне лично нравится использовать что-то еще, что уже сделано, поэтому мне не нужно было «изобретать колесо», как они говорят.

Смежные вопросы