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

bill_homeAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Routers

From novice to tech pro — start learning today.