Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 733
  • Last Modified:

using Telnet to get information from a Router using .net

Hello Experts,
         I am trying to get a stream of data from a router. If I use the commands on the command line they work fine. I am trying to get it to work in vb.net with no avail.  In the code pasted below I loop until I get a response for username and password which seems to work.  When I send the commands (system ,shell, top) I will get the response back "Username:telnet" or sometimes "password...".

Thanks in Advance
Bill
Dim myIPAddress As String = "192.168.1.1"
        Dim localAdd As System.Net.IPAddress = IPAddress.Parse(myIPAddress)
        Dim sock As TcpClient
        Dim s As String
        Dim n As Integer
 
        Try
            sock = New TcpClient()
            sock.Connect(myIPAddress, 23)
 
            Dim b As Boolean = sock.Connected
 
            Dim ns As NetworkStream = sock.GetStream
            Dim sr As New StreamReader(ns)
            Dim result As String
 
            Dim sw As New StreamWriter(ns)
           
            Dim b1 As Boolean
 
            Do Until n = 2
                If Not b1 Then
                    sw.WriteLine("telnet")
                    sw.Flush()
                End If
 
                result = sr.ReadLine
 
                If InStr(result, "Username") Then
                    sw.WriteLine("USERNAME")
                    sw.Flush()
                    b1 = True
                    n += 1
                End If
 
                If InStr(result, "Password") Then
                    sw.WriteLine("PASSWORD")
                    sw.Flush()
                    b1 = True
                    n += 1
                End If
 
            Loop
 
 
            sw.WriteLine("system")
            sw.Flush()
            result = sr.ReadLine
 
            sw.WriteLine("shell")
            sw.Flush()
            result = sr.ReadLine
 
            sw.WriteLine("top")
            sw.Flush()
            result = sr.ReadLine
 
            s = result
 
        Catch ex As Exception
            MessageBox.Show("Error " & ex.Message)
        Finally
            sock.Close()
        End Try

Open in new window

0
bill_home
Asked:
bill_home
  • 2
  • 2
1 Solution
 
Jan SpringerCommented:
If you don't get an answer to this question, you may want to consider 'rancid' to get the configuration data and changes or write something in perl using the expect module.
0
 
bill_homeAuthor Commented:
What is rancid?  I noticed that questions of this type are left un-answered all over the web.
0
 
Jan SpringerCommented:
rancid is a tool that is used to monitor a device's configuration.

http://www.shrubbery.net/rancid/
0
 
bill_homeAuthor Commented:
I found out how to get around this, it was all about hand-shaking with tcpip I will put the solution here if anyone needs it.. kind of a kludge but it worked

 Dim sReadline As String = ""
        Dim passflag As Boolean
        Dim adminflag As Boolean

        Do
            sw.WriteLine("")
            result = sr.ReadLine
            sReadline = Mid(result, 1, 4)
        Loop Until sReadline = "User" Or sReadline = "Pass"

        Do
            If sReadline = "User" Or adminflag Then
                If ns.CanRead And ns.CanWrite Then
                    passflag = False
                    adminflag = True
                    sw.WriteLine("username")
                    result = sr.ReadLine
                    sReadline = Mid(result, 1, 4)
                End If
            End If


            If sReadline = "Pass" Or passflag Then
                If ns.CanRead And ns.CanWrite Then
                    passflag = True
                    adminflag = False
                    sw.WriteLine("password")
                    result = sr.ReadLine
                    sReadline = Mid(result, 1, 4)
                End If
            End If
        Loop Until sReadline = "Wire"

        Do
            sw.WriteLine("system")
            result = sr.ReadLine
            sReadline = Mid(result, 1, 7)
        Loop Until sReadline = "system>"

        Do
            sw.WriteLine("shell")
            result = sr.ReadLine
            sReadline = Mid(result, 1, 4)
        Loop Until sReadline = "Temp"

        Do
            sw.WriteLine("top")
            result = sr.ReadLine
            sReadline = Mid(result, 1, 80)
            If InStr(sReadline, "Mem", CompareMethod.Binary) > 0 Then
                MessageBox.Show(sReadline) 'mem load
                result = sr.ReadLine
                sReadline = Mid(result, 1, 80) 'blank line
                MessageBox.Show(sReadline)
                result = sr.ReadLine
                sReadline = Mid(result, 1, 80)  'cpu load
                MessageBox.Show(sReadline)
            End If
        Loop ' loop value on form for the amount of times to loop
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now