skum has asked for the wisdom of the Perl Monks concerning the following question:

Hi, Newbie to perl.Need help connecting to cisco device.I'm trying to connect to a cisco device via terminal server. Manually, when the server is connected, the username prompt comes after a carriage return. How can I send this carriage return via my code. I tried different ways but nothing is working.The Username prompt doesn't come up and it gets timeout.I looked at the various related threads but nothing seems to work.Here's the snippet of my code.Whats wrong here ? Is there any better way of doing it ?

use Net::Telnet::Cisco; # $host="10.10.10.30"; $port="2033"; $user="cisco"; $password="cisco"; my $session = Net::Telnet::Cisco->new( Host => $host, Port => $port, Prompt => '/.*#:/', Input_log => "input.log", Output_log => "output.log", Dump_Log => "dump.log", Timeout => 10); $session->always_waitfor_prompt; $session->waitfor_pause(0.6); $session->send_wakeup('connect'); #Sending new line for carriage return $session->print("\n"); #Checking whats the last promt $match = $session->last_prompt; print" Match: + $match"; #Wait for the username prompt and enter username @out = $session->waitfor('/Username:.*$/'); print "@out\n"; @out = $session->print($user); print "@out\n"; #Wait for the password prompt and enter the password #$session->waitfor_pause(0.6); # @out = $session->waitfor('/Password:.*$/'); print "@out\n"; @out = $session->print($password); print "@out\n"; #$session->always_waitfor_prompt; #Wait for enable password @out = $session->waitfor('/vcctest-30-6k\>/'); print "@out\n"; @out = $session->print("enable"); @out = $session->waitfor('/Password:.*$/'); print "@out\n"; @out = $session->print($password); @out = $session->close;

Replies are listed 'Best First'.
Re: Help: Net::Telnet::Cisco
by kyle (Abbot) on Mar 26, 2009 at 17:29 UTC

    I've never used Net::Telnet::Cisco, so I can't speak from experience, but I suspect you need to newline terminate the things you're printing. For example:

    $session->print( "$user\n" );

    That said, a quick look at the documentation indicates that the kind of stuff you're doing can be done more easily with methods created specifically for this (e.g., cmd). It may be worth taking a quick look yourself.

    If you plan to spend much time with Perl, you'd do well to learn to Use strict and warnings too, though I doubt that's causing you any trouble here and now.

      Actually, it not even going till that line.It gets time out before that as can be seen here.

      C:\perlL\CLI>perl telnet.pl

      Match: + pattern match timed-out at telnet.pl line 40

Re: Help: Net::Telnet::Cisco
by VinsWorldcom (Prior) on Mar 26, 2009 at 19:36 UTC
      I was facing the similar problem. I solved this by sending a wakeup with "\r" character and it worked for me.
      I would like you to check following code
      my $session = Net::Telnet::Cisco->new (Host=>$ipaddr,Port=>$port,Timeo +ut=>20); $session->print("\r"); # required to wakeup. $session->print("\r")
        The "print("\r") doesn't work going through a cisco 2600 router as a terminal server.