请问如何用vb.net实现telnet到服务器上发送命令和接收结果?

时间:2022-02-16 15:19:12
请问如何用vb.net实现telnet到服务器上发送命令和接收结果?

6 个解决方案

#1


使用PIPE重定向:

示例为测试ping远程IP,telnet同理


1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = "Processing..."
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
        P.Close()
        RichTextBox1.Text = S.Replace(Chr(13), "")
    End Sub

2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
        RichTextBox1.Text = "Processing..."
        T.Start()
    End Sub
    Private Sub run()
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
        P.Close()
        Me.SetText(S.Replace(Chr(13), ""))
    End Sub
    Private Sub SetText(ByVal [text] As String)
        '实现线程安全调用,查询控件的 InvokeRequired 属性。
        '如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
        '如果 InvokeRequired 返回 false,则直接调用控件。
        If Me.RichTextBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else
            Me.RichTextBox1.Text = [text]
        End If
    End Sub

#2


谢谢,我试过了,ping 的确可以,但是telnet不行,没有结果输出呀

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = "Processing..."
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口 
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("telnet 10.40.64.1") ' 向cmd.exe输入command 
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出 
        P.Close()
        RichTextBox1.Text = S.Replace(Chr(13), "")
    End Sub



Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。

C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1

C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit

#3


学习

#4


#5


关注中

#6


WINDOWS的telnet不支持管道操作,所以不行,如果要用这种方法的话可以找一个支持管道的TELNET程序

#1


使用PIPE重定向:

示例为测试ping远程IP,telnet同理


1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = "Processing..."
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
        P.Close()
        RichTextBox1.Text = S.Replace(Chr(13), "")
    End Sub

2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
        RichTextBox1.Text = "Processing..."
        T.Start()
    End Sub
    Private Sub run()
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
        P.Close()
        Me.SetText(S.Replace(Chr(13), ""))
    End Sub
    Private Sub SetText(ByVal [text] As String)
        '实现线程安全调用,查询控件的 InvokeRequired 属性。
        '如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
        '如果 InvokeRequired 返回 false,则直接调用控件。
        If Me.RichTextBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else
            Me.RichTextBox1.Text = [text]
        End If
    End Sub

#2


谢谢,我试过了,ping 的确可以,但是telnet不行,没有结果输出呀

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = "Processing..."
        Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        '这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口 
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("telnet 10.40.64.1") ' 向cmd.exe输入command 
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出 
        P.Close()
        RichTextBox1.Text = S.Replace(Chr(13), "")
    End Sub



Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。

C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1

C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit

#3


学习

#4


#5


关注中

#6


WINDOWS的telnet不支持管道操作,所以不行,如果要用这种方法的话可以找一个支持管道的TELNET程序