Search code examples
vb.nettelnet

Sending Commands to Telnet


I have a Form that I am making that lets me select a line and reset all of the port on the line. This is done through Telnet. I understand how to Socket and send the IP Address I wish to work with but what I do not understand is sending the commands to log in and reset the ports.

The set up is that when one of more check boxes are selected for the different line it calls on private sub to run a line before starting on the next one.

I have been web searching for a few days not. The last code I tried was the following:

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)

I have been going around in circle trying to understand this.

I have tried doing the Telnet through cmd.exe but I keep coming back with errors and abandoned that route.

I have also seen using code to find words in the Telnet.

Example:

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

But not 100% sure on how to fully adapt it to what I can use. Any help is appreciated.

Thank you.

Edit: Addition Info.

I have the following at the top of the code list

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

I am new to using Telnet with vb.net. However, why is it so hard to do this in vb.net and in Cmd.exe it only takes six commands?


Solution

  • Okey mate , here is the code you are looking for , but focus :

    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