2015-01-07 151 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) 

我一直在绕圈试图了解这一点。

我已经尝试过通过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

你应该看看你正在使用的协议的文档。通过快速查看代码,您没有指定要发送的数据的长度,通常这是通过标题或以某种方式终止字符串(空/空格)来完成的。此外,你认为在阅读时你会得到所有想要的信息。这不是真的,读取一次只能返回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