Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Cisco Telnet

by CongoGrey (Sexton)
on Feb 18, 2003 at 20:28 UTC ( [id://236383]=sourcecode: print w/replies, xml ) Need Help??
Category: Networking Code
Author/Contact Info Richmon iskydiver@cox.net
Description: This script will import a list of Ip addresses into an array and then telnet to the Cisco routers and execute commands and log the output to a file. useful for making changes to a lot of routers where SNMP MIBS are not available.
#
#Use the Net Telnet Cisco module to getting into routers
#Richmon Schumann 2-15-03
######################################################################
use Net::Telnet::Cisco;
######################################################################
#This opens my log file for output
open (LOGFILE, '>mylogfilepath') or die "Cannnot open log file : $!\n"
+;
#
#This opens my seed file and stores it into an array
#
open (FILE, 'myseedfilepath') or die "Cannot open file : $!\n";
my @array = <FILE>;
chomp @array;
#
#This does the telnet into the routers and logs the output to the logf
+ile
foreach my $ip (@array) {
    print { 'LOGFILE' } "$ip\n";
    my $Telnet = Net::Telnet::Cisco->new(Host => $ip);
    $Telnet->login(Name => 'user', Password => 'pass');
    print { 'LOGFILE' } $Telnet->cmd('show line 1');
    print { 'LOGFILE' } $Telnet->cmd('show line 5');
}
#
close LOGFILE;
close FILE;
Replies are listed 'Best First'.
Re: Cisco Telnet
by Aristotle (Chancellor) on Feb 19, 2003 at 01:35 UTC
    No need to slurp the seed file, you can iterate over the lines. Make it a habit to use the three-argument form of open. As a rule of thumb, using lexical variables for you filehandles is better.
    use strict; use Net::Telnet::Cisco; open my $log, '>', 'mylogfilepath' or die "Cannot writeopen log file: $!\n"; open my $seed, '<', 'myseedfilepath' or die "Cannot readopen seed file: $!\n"; while(<$seed>) { chomp; my $Telnet = Net::Telnet::Cisco->new(Host => $_); $Telnet->login(Name => 'user', Password => 'pass'); print $log "$ip\n", map $Telnet->cmd($_), 'show line 1', 'show lin +e 5'; }

    Makeshifts last the longest.

      Thanks for the input...but, I am not able to get the script to run properly I got this far:
      use strict; use Net::Telnet::Cisco; open my $log, '>', 'logfilepath' or die "Cannnot open log file : $!\n" +; open my $seed, '+<', 'seedfilepath' or die "Cannot open file : $!\n"; while($seed) { chomp $seed; my $Telnet = Net::Telnet::Cisco->new(Host => $_ or die "Cannot ope +n session to '$seed': $!\n"); $Telnet->login(Name => 'rschuman', Password => 'tagheuer1') or die + "Cannot log into device '$_': $!\n"; print $log "$_\n", map $Telnet->cmd($_), 'show line aux 0'; }
      I get the following error: Useless use of a constant in void context at C:\Documents and Settings\rschuman\ Desktop\telnet2.pl line 24. Cannot open session to 'GLOB(0x1abf15c)': I also realized that the original script's output was to much so i added a grep of the output:
      use strict; use Net::Telnet::Cisco; # open (LOGFILE, '>logfilepath') or die "Cannnot open log file : $!\n"; # open (SEEDFILE, 'seedfilepath') or die "Cannot open file : $!\n"; my @iplist = <SEEDFILE>; foreach my $ip (@iplist) { select LOGFILE; print "$ip\n"; my $Telnet = Net::Telnet::Cisco->new(Host => $ip) or die "Cannot o +pen session to '$ip': $!\n"; $Telnet->login(Name => 'user', Password => 'pass') or die "Cannot +log into device '$ip': $!\n"; my $output = $Telnet->cmd('show line aux 0'); my $matchlines = grep (/Modem hardware state:/, $output); print "$matchlines\n"; } close LOGFILE; close SEEDFILE;
      I also get the following error even though the script does run: Argument "" isn't numeric in numeric gt (>) at C:/Perl/site/lib/Net/Telnet.pm li ne 2569, <SEEDFILE> line 3.
        In the first script you forgot to actually use the filehandle to read from it: it must be while(<$seed>) - note the angle brackets. Also, you misplaced a paren two lines later - it must be
        my $Telnet = Net::Telnet::Cisco->new(Host => $_) or die "Cannot open session to '$seed': $!\n";

        Makeshifts last the longest.

Re: Cisco Telnet
by CongoGrey (Sexton) on Feb 18, 2003 at 20:32 UTC
    I am still very green to Perl but any comments or suggestions would be very appreciated.

      Your print statements are a little odd (I'm not even sure why it works that way), and would be more readable if you just did:

      print LOGFILE $stuff_to_print."\n";

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: sourcecode [id://236383]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-23 23:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found