将命令发送到Telnet

时间:2015-01-07 16:44:00

标签: vb.net telnet

我有一个我正在制作的表单,让我选择一行并重置该行的所有端口。这是通过Telnet完成的。我理解如何套接字并发送我希望使用的IP地址,但我不明白的是发送命令登录并重置端口。

设置是当为不同的行选择一个或多个复选框时,它会调用private sub来在开始下一行之前运行一行。

我已经在网上搜索了几天没有。我尝试的最后一个代码如下:

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)

我一直在试图理解这一点。

我已尝试通过cmd.exe进行Telnet,但我一直有错误,并放弃了这条路线。

我还看到使用代码在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 个答案:

答案 0 :(得分:2)

Okey mate,这是您正在寻找的代码,但重点是:

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