2015-01-07 2 views
2

У меня есть форма, которую я создаю, что позволяет мне выбрать строку и сбросить весь порт на линии. Это делается через Telnet. Я понимаю, как использовать Socket и отправлять IP-адрес, с которым я хочу работать, но я не понимаю, отправляет команды для входа и сброса портов.Отправка команд в Telnet

Настройка заключается в том, что при выборе одного из дополнительных флажков для другой строки он вызывает частную подпрограмму для запуска строки перед запуском на следующем.

Я был в сети на несколько дней. Последний код, который я пробовал, был следующим:

Dim TelnetClient As TcpClient 
Dim ThisStream As NetworkStream 
Dim SendBuffer(128) As Byte 
Dim ReadBuffer(128) As Byte 
Dim ReturnVal As String 
Dim ReturnLength As Integer 

TelnetClient = New TcpClient("Ip Address", 23) 
ThisStream = TelnetClient.GetStream 

SendBuffer = System.Text.Encoding.ASCII.GetBytes("Username") 
ThisStream.Write(SendBuffer, 0, SendBuffer.Length) 
ReturnLength = ThisStream.Read(ReadBuffer, 0, ReadBuffer.Length) 
ReturnVal = System.Text.Encoding.ASCII.GetString(ReadBuffer) 
SendBuffer = System.Text.Encoding.ASCII.GetBytes("Password") 
ThisStream.Write(SendBuffer, 0, SendBuffer.Length) 

Я собираюсь по кругу, пытаясь понять это.

Я пробовал делать Telnet через cmd.exe, но я продолжаю возвращаться с ошибками и отказываться от этого маршрута.

Я также видел, используя код, чтобы найти слова в Telnet.

Пример:

If message.ToString.EndsWith("login:") Then 
    Await WriteStringAsync("username", stream 

Но не 100% уверены в том, чтобы полностью адаптировать его к тому, что я могу использовать. Любая помощь приветствуется.

спасибо.

Редактировать: дополнительная информация.

У меня есть следующие в верхней части списка кодов

Imports System.IO 
Imports System.Net 
Imports System.Net.Sockets 

Я новичок в использовании Telnet с vb.net. Однако почему это так сложно сделать в vb.net, а в Cmd.exe требуется всего шесть команд?

+1

Вы должны смотреть на документацию протокола, который вы используете. Быстро глядя на код, вы не указываете длину данных, которые вы отправляете, обычно это делается с заголовком или каким-то образом заканчивает строку (нуль/пробел). Кроме того, вы предполагаете, что при чтении вы получаете всю необходимую информацию. Это неверно, чтение может возвращать только 1 байт за раз. –

+0

Буду честно, я скопировал и попробовал повторное использование этого кода для себя. Я полностью потерян. Попытка исследовать, что делает каждая строка ... не очень далеко. – Alenhj

ответ

2

Окей дружище, вот код, который вы ищете, но фокус:

Dim Full_Stop As String = "" 
Dim TelnetClient As New TcpClient 
Private Sub StartButton_Click(sender As Object, e As EventArgs) Handles StartButton.Click 
    TelnetClient.Connect("IP ADDRESS", 23) 'Connecting to the IP Given 
    Send_Sub("Start Connection Command") 
    Dim thr As New Threading.Thread(AddressOf Receive_thread) 
    thr.Start() 
End Sub 
Private Sub StopButton_Click(sender As Object, e As EventArgs) Handels StopButton.Click 
Full_Stop = "Stop" 
TelnetClient.Close() 
End Sub 
Sub Send_Sub(ByVal msg As String) 
    Dim byt_to_send() As Byte = System.Text.Encoding.ASCII.GetBytes(msg) 
    TelnetClient.Client.Send(byt_to_send, 0, byt_to_send.Length, SocketFlags.None) 
End Sub 
Sub Receive_thread() 
re: 
    If Full_Stop = "Stop" Then Exit Sub 'If you set Full_Stop string to "Stop" the thread will end 
    If TelnetClient.Client.Available < 0 Then 'Check if there is any Data to receive 
     Dim byt_to_receive(TelnetClient.Available - 1) As Byte 
     TelnetClient.Client.Receive(byt_to_receive, 0, byt_to_receive.Length, SocketFlags.None) 
     Dim String_From_Byte As String = System.Text.Encoding.ASCII.GetString(byt_to_receive) 
     If String_From_Byte = "login:" Then 'If the telnet asks you to Enter the login name the Send_Sub will do the job 
      Send_Sub("username") 
     ElseIf String_From_Byte = "password:" Then 'If the telnet asks you to Enter the Password the Send_Sub will do the job 
      Send_Sub("password") 
     End If 
    End If 
    GoTo re 'this will NOT allow the thread to End by sending it back to re: statement, unless the Full_Stop is "Stop" 
End Sub 

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

  • Нет связанных вопросов^_^