Difference between revisions of "Net: : Telnet: : Cisco"

From Teknologisk videncenter
Jump to: navigation, search
m (New page: [http://search.cpan.org/dist/Net-Telnet-Cisco/ '''Net::Telnet::Cisco'''] er et Perl modul som er beregnet til at koble op imod Cisco udstyr. == Eksempel 1 == <source lang=perl> #!...)
 
m (Eksempel 3 - findMacPort)
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
__TOC__
 
[http://search.cpan.org/dist/Net-Telnet-Cisco/ '''Net::Telnet::Cisco'''] er et [[Perl]] modul som er beregnet til at koble op imod Cisco udstyr.
 
[http://search.cpan.org/dist/Net-Telnet-Cisco/ '''Net::Telnet::Cisco'''] er et [[Perl]] modul som er beregnet til at koble op imod Cisco udstyr.
 
   
 
   
Line 37: Line 38:
 
     }
 
     }
 
   }
 
   }
 +
</source>
 +
== Eksempel 2 ==
 +
<source lang=perl>
 +
#!/usr/bin/perl -w
 +
use strict;
 +
 +
use Net::Ping;
 +
use Net::Telnet::Cisco;
 +
 +
my @output;
 +
my $logfile = 'C:\temp\logfile';
 +
my $session; # Til at holde Net::Telnet::Cisco instans
 +
my $backup_host  = "201.1.1.201";
 +
######## Status info
 +
my $ciscoConfReg;
 +
my $ciscoIOS;
 +
my $ciscoIOSfile;
 +
my $ciscoFlashSize;
 +
my $ciscoMemSize;
 +
my $ciscoModel;
 +
#####################
 +
#
 +
# INIT
 +
 +
if ( ! open EUC_LOG, ">> $logfile" ) {
 +
  die "Kan ikke åbne logfil";
 +
} else {
 +
  info(101, "Running.\n");
 +
}
 +
 +
    my @devices = ( "192.168.22.50","80.80.12.112","192.168.22.51","marswan" );
 +
  #system "cls";
 +
  foreach (@devices) {
 +
 +
    #print "Session oprettes til $_\n";
 +
    if ( icmpOnline($_) ) {
 +
        print "$_ OK\n";
 +
    } else {
 +
        print "$_ offline....\n";
 +
        warning( 101, "Pingtest: $_ offline");
 +
    }
 +
  }
 +
  if ( ciscoLogin('192.168.22.50', 'cisco') ) {
 +
    print "session: $session\n";
 +
    ciscoGetInfo();
 +
    ciscoClose();
 +
    print "Model: $ciscoModel\nConfReg: $ciscoConfReg\nMemory: $ciscoMemSize MB\n Flash: $ciscoFlashSize MB\nIOS: $ciscoIOS\nFile: $ciscoIOSfile\n";
 +
 +
  } else {
 +
    print "Der kunne ikke logges ind\n";
 +
    warning( 102, "Der kunne ikke logges ind på host");
 +
  }
 +
 +
sub icmpOnline {
 +
  my $ping_instance;
 +
  my $host = shift;
 +
    $ping_instance = Net::Ping->new('icmp' , 1);
 +
    if ($ping_instance->ping($host) ) {
 +
        return 1;
 +
    } else {
 +
        return 0;
 +
    }
 +
}
 +
 +
sub ciscoCommand {
 +
    my $command=shift;
 +
    my @result;
 +
 +
    @result = $session->cmd($command);
 +
    return @result;
 +
}
 +
 +
 +
sub ciscoLogin {
 +
    my $host = shift;
 +
    my $password = shift;
 +
    $session = Net::Telnet::Cisco->new(Host => $host,
 +
        Input_log => "C:\\temp\\input-log.$host",
 +
Timeout => 60,
 +
Errmode => "return");
 +
    if ( ! $session->login('login', $password ) ) {
 +
      warn ("ADVARSEL: Der kunne ikke skabes kontakt til: $host\n");
 +
      return 0;
 +
    } else {
 +
      # Enable mode
 +
      if ($session->enable( $password ) ) {
 +
          #@output = $session->cmd("configure terminal\n");
 +
        $session->cmd("terminal lenght 0");
 +
      } else {
 +
          warn "Can't enable: " . $session->errmsg;
 +
          return 0;
 +
      }
 +
    return 1; # Success
 +
    }
 +
}
 +
 +
sub ciscoClose {
 +
    if ( !$session->close ) {
 +
        warning( 103, "Kan ikke logge af: ");
 +
    }
 +
}
 +
sub ciscoGetInfo {
 +
    my @output = ciscoCommand('show version');
 +
    foreach (@output) {
 +
        if ( $_ =~ m/\S+\s+(\S+).+\(revision.+/ ) {
 +
            $ciscoModel = $1;
 +
        }
 +
        if ( $_ =~ m/Configuration register is (\S+)/ ) {
 +
            $ciscoConfReg = $1;
 +
        }
 +
        if ( $_ =~ m/\(revision \S+\s+\S+\s+(\d+)K\/(\d+)K/ ) {
 +
            $ciscoMemSize = int(($1+$2)/1024);
 +
        }
 +
        if ( $_ =~ m/(\d+)K.*flash/ ) {
 +
            $ciscoFlashSize = int($1/1024);
 +
        }
 +
        if ( $_ =~ m/(IOS.*)/ ) {
 +
            $ciscoIOS = $1;
 +
        }
 +
        if (  $_ =~ m/System image file is ".*:(.*)"/ ) {
 +
            $ciscoIOSfile = $1;
 +
        }
 +
    }
 +
 +
}
 +
 +
sub info {
 +
my($arg1, $arg2) = @_;
 +
print EUC_LOG "INFO...: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
 +
print "INFO: ", $arg2, "\n";
 +
}
 +
 +
sub warning {
 +
my $arg1 = shift;
 +
my $arg2 = shift;
 +
print EUC_LOG "WARNING: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
 +
print "WARNING: ", $_[1],"\n";
 +
}
 +
 +
sub error {
 +
my $arg1 = shift;
 +
my $arg2 = shift;
 +
print EUC_LOG "ERROR..: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
 +
print "ERROR: ", $arg2, "\n";
 +
}
 +
 +
sub tid {
 +
my @mon_abbr =
 +
      qw( Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec );
 +
 +
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
 +
 +
return sprintf " %02i:%02i:%02i %2i. %s %4i ", $hour, $min, $sec,
 +
$mday, $mon_abbr[$mon], $year+1900;
 +
}
 +
</source>
 +
==Eksempel 3 - findMacPort ==
 +
<source lang=perl>
 +
#!/usr/bin/perl
 +
######################
 +
# Program name:
 +
#
 +
# Abstract....:
 +
#
 +
# Author......: Henrik Thomsen/Mercantec
 +
# Email.......: heth@mercantec.dk
 +
######################
 +
use strict;
 +
use warnings;
 +
use Net::Telnet::Cisco;
 +
 +
my $description=findMacPort("192.168.22.202","cisco","0021.869f.c355");
 +
print "FindMacPort sagde: $description\n";
 +
 +
 +
 +
 +
sub findMacPort {
 +
  my $IP=shift;
 +
  my $PW=shift;
 +
  my $MAC=shift;
 +
  my $PORT;
 +
  my $session = Net::Telnet::Cisco->new(Host => $IP);
 +
  $session->login('login', $PW);
 +
  # Execute a command
 +
  my @output = $session->cmd('show mac-address dynamic');
 +
  foreach my $linje (@output) {
 +
    # Find linien hvor MAC addressen står
 +
    if ( $linje =~ /$MAC/ ) {
 +
    #Find sidste ord på linjen fx. Fa0/11
 +
        $linje =~ /.*?(\S+)$/;
 +
        $PORT=$1;
 +
    }
 +
  }
 +
 +
  # Enable mode
 +
  if ($session->enable($PW) ) {
 +
      @output = $session->cmd("show run int $PORT");
 +
      foreach my $linje (@output) {
 +
      # Find linie hvor første ord er description og husk beskrivelsen i $1
 +
        if ( $linje =~ /^\s+description(.*)/ ) {
 +
          $session->close;
 +
          return($1);
 +
        }
 +
      }
 +
  } else {
 +
      warn "Can't enable: " . $session->errmsg;
 +
  }
 +
  $session->close;
 +
 +
}
 
</source>
 
</source>
 
[[Category:Perl]]
 
[[Category:Perl]]

Latest revision as of 09:31, 1 October 2009

Net::Telnet::Cisco er et Perl modul som er beregnet til at koble op imod Cisco udstyr.


Eksempel 1

#!/usr/bin/env perl

use Net::Telnet::Cisco;

my $backup_host  = "201.1.1.201";
my @devices = ( "H1R1", "H1R2", "H1R3", "H2R1", "H2R2", "H2R3", "H3R1", "H3R2",
                "H3R3", "H4R1", "H4R2", "H4R3", "H1S", "H2S", "H3S", "H4S", "BGPS" );

  foreach (@devices) {

    print "Session oprettes til $_\n";

    my $session = Net::Telnet::Cisco->new(Host => $_,
        Input_log => "/tmp/input-log.$_",
	Timeout => 60);

    print "der logges ind paa   $_\n";
    #Login via Telnet med passwordet cisco
    if ( ! $session->login('login', 'cisco') ) {
       print ("ADVARSEL: Der kunne ikke skabes kontakt til: $_\n");
    } else {
      # Enable mode (Password cisco)
      if ($session->enable("cisco") ) {
          @output = $session->cmd("copy running-config tftp:\n$backup_host\n$_-config\n");
          print "@output\n"; # Vis på skærmen hvad der sker
      } else {
          warn "Can't enable: " . $session->errmsg;
      }
    $session->close;
    }
  }

Eksempel 2

#!/usr/bin/perl -w
use strict;

use Net::Ping;
use Net::Telnet::Cisco;

my @output;
my $logfile = 'C:\temp\logfile';
my $session; # Til at holde Net::Telnet::Cisco instans
my $backup_host  = "201.1.1.201";
######## Status info
my $ciscoConfReg;
my $ciscoIOS;
my $ciscoIOSfile;
my $ciscoFlashSize;
my $ciscoMemSize;
my $ciscoModel;
#####################
#
# INIT

if ( ! open EUC_LOG, ">> $logfile" ) {
  die "Kan ikke åbne logfil";
} else {
  info(101, "Running.\n");
}

     my @devices = ( "192.168.22.50","80.80.12.112","192.168.22.51","marswan" );
  #system "cls";
  foreach (@devices) {

    #print "Session oprettes til $_\n";
    if ( icmpOnline($_) ) {
        print "$_ OK\n";
    } else {
        print "$_ offline....\n";
        warning( 101, "Pingtest: $_ offline");
    }
  }
  if ( ciscoLogin('192.168.22.50', 'cisco') ) {
    print "session: $session\n";
    ciscoGetInfo();
    ciscoClose();
    print "Model: $ciscoModel\nConfReg: $ciscoConfReg\nMemory: $ciscoMemSize MB\n Flash: $ciscoFlashSize MB\nIOS: $ciscoIOS\nFile: $ciscoIOSfile\n";

  } else {
    print "Der kunne ikke logges ind\n";
    warning( 102, "Der kunne ikke logges ind på host");
  }

sub icmpOnline {
  my $ping_instance;
  my $host = shift;
    $ping_instance = Net::Ping->new('icmp' , 1);
    if ($ping_instance->ping($host) ) {
        return 1;
    } else {
        return 0;
    }
}

sub ciscoCommand {
    my $command=shift;
    my @result;

    @result = $session->cmd($command);
    return @result;
}


sub ciscoLogin {
    my $host = shift;
    my $password = shift;
    $session = Net::Telnet::Cisco->new(Host => $host,
        Input_log => "C:\\temp\\input-log.$host",
	Timeout => 60,
	Errmode => "return");
    if ( ! $session->login('login', $password ) ) {
       warn ("ADVARSEL: Der kunne ikke skabes kontakt til: $host\n");
       return 0;
    } else {
      # Enable mode
      if ($session->enable( $password ) ) {
          #@output = $session->cmd("configure terminal\n");
         $session->cmd("terminal lenght 0");
      } else {
          warn "Can't enable: " . $session->errmsg;
          return 0;
      }
    return 1; # Success
    }
}

sub ciscoClose {
    if ( !$session->close ) {
        warning( 103, "Kan ikke logge af: ");
    }
}
sub ciscoGetInfo {
    my @output = ciscoCommand('show version');
    foreach (@output) {
        if ( $_ =~ m/\S+\s+(\S+).+\(revision.+/ ) {
            $ciscoModel = $1;
        }
        if ( $_ =~ m/Configuration register is (\S+)/ ) {
            $ciscoConfReg = $1;
        }
        if ( $_ =~ m/\(revision \S+\s+\S+\s+(\d+)K\/(\d+)K/ ) {
            $ciscoMemSize = int(($1+$2)/1024);
        }
        if ( $_ =~ m/(\d+)K.*flash/ ) {
            $ciscoFlashSize = int($1/1024);
        }
        if ( $_ =~ m/(IOS.*)/ ) {
            $ciscoIOS = $1;
        }
        if (  $_ =~ m/System image file is ".*:(.*)"/ ) {
            $ciscoIOSfile = $1;
        }
    }

}

sub info {
my($arg1, $arg2) = @_;
print EUC_LOG "INFO...: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
print "INFO: ", $arg2, "\n";
}

sub warning {
my $arg1 = shift;
my $arg2 = shift;
print EUC_LOG "WARNING: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
print "WARNING: ", $_[1],"\n";
}

sub error {
my $arg1 = shift;
my $arg2 = shift;
print EUC_LOG "ERROR..: ", tid(), " nummer: ", $arg1, " -> ", $arg2, "\n";
print "ERROR: ", $arg2, "\n";
}

sub tid {
my @mon_abbr =
      qw( Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec );

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);

return sprintf " %02i:%02i:%02i %2i. %s %4i ", $hour, $min, $sec,
	$mday, $mon_abbr[$mon], $year+1900;
}

Eksempel 3 - findMacPort

#!/usr/bin/perl
######################
# Program name:
#
# Abstract....:
#
# Author......: Henrik Thomsen/Mercantec
# Email.......: heth@mercantec.dk
######################
use strict;
use warnings;
use Net::Telnet::Cisco;

my $description=findMacPort("192.168.22.202","cisco","0021.869f.c355");
print "FindMacPort sagde: $description\n";




sub findMacPort {
  my $IP=shift;
  my $PW=shift;
  my $MAC=shift;
  my $PORT;
  my $session = Net::Telnet::Cisco->new(Host => $IP);
  $session->login('login', $PW);
  # Execute a command
  my @output = $session->cmd('show mac-address dynamic');
  foreach my $linje (@output) {
    # Find linien hvor MAC addressen står
    if ( $linje =~ /$MAC/ ) {
    	#Find sidste ord på linjen fx. Fa0/11
        $linje =~ /.*?(\S+)$/;
        $PORT=$1;
    }
  }

  # Enable mode
  if ($session->enable($PW) ) {
      @output = $session->cmd("show run int $PORT");
      foreach my $linje (@output) {
      	# Find linie hvor første ord er description og husk beskrivelsen i $1
        if ( $linje =~ /^\s+description(.*)/ ) {
           $session->close;
           return($1);
        }
      }
  } else {
      warn "Can't enable: " . $session->errmsg;
  }
  $session->close;

}