#!/usr/bin/perl # ############################################################### # Copyright 1999 Frontier GlobalCenter/Global Crossing # Copy/Use/Modification is fine please mention us in any mods and # send them to us. Also thanks to the perl snmp people! ############################################################### # # who to blame: pee@gblx.net Paul E. Erkkila # # A perl script to have a cisco router dump it's configs # to a tftp host # # To use this script I recommend defining a view on the router # that does NOT have full write such as # # snmp-server view configView system included # snmp-server view configView ciscoConfigCopyMIB included # snmp-server community [community name] view configView RW # # It needs to be RW so it can set table entries # # the CISCO-CONFIG-COPY mib is 12.x only as far as I # can tell # # $Author: oetiker $ # $Id: scarfconf.pl,v 1.1.1.1 2002/02/26 10:16:32 oetiker Exp $ # $Revision: 1.1.1.1 $ # # require 5.003; use strict; ## snmp perl use SNMP_Session; use SNMP_util "0.71"; use BER; my $host = $ARGV[0] || die "useage: $0 target community toHost ID"; my $community = $ARGV[1] || die "useage: $0 target community toHost ID"; my $toHost = $ARGV[2] || die "useage: $0 target community toHost ID"; my $randomid = $ARGV[3] || die "useage: $0 target community toHost ID"; &snmpmapOID("cicsoMgmt", "1.3.6.1.4.1.9.9.96"); &snmpmapOID("ccCopySourceFileType", "1.3.6.1.4.1.9.9.96.1.1.1.1.3"); &snmpmapOID("ccCopyDestFileType", "1.3.6.1.4.1.9.9.96.1.1.1.1.4"); &snmpmapOID("ccCopyServerAddress", "1.3.6.1.4.1.9.9.96.1.1.1.1.5"); &snmpmapOID("ccCopyFileName", "1.3.6.1.4.1.9.9.96.1.1.1.1.6"); &snmpmapOID("ccCopyEntryRowStatus", "1.3.6.1.4.1.9.9.96.1.1.1.1.14"); &snmpmapOID("ccCopyState", "1.3.6.1.4.1.9.9.96.1.1.1.1.10"); my ($oid,$response); # # First a simple SNMP Get # my $hostopt = $community . "@" . $host; # get system uptime to see if it's actually working :) $oid = "sysUptime"; # print "Getting $oid from $host\n"; ($response) = &snmpget($hostopt, $oid); if ($response) { # print "$oid : $response\n"; } else { print "$host did not respond to SNMP query\n"; exit; } # build the table row # print "Sending Row Build (Create and Wait) "; $oid = "ccCopyEntryRowStatus." . $randomid; ($response) = &snmpset($hostopt,$oid,'int',5); if ($response) { # print "$oid : $response\n"; } else { print "Failure setgging $oid on $host\n"; exit; } # 4 is running-config # print "Setting source file type "; $oid = "ccCopySourceFileType." . $randomid; ($response) = &snmpset($hostopt,$oid,'int',4); if ($response) { # print "$oid : $response\n"; } else { print "Failure setting $oid on $host\n"; exit; } # 1 is netfile #print "Setting destination file type "; $oid = "ccCopyDestFileType." . $randomid; ($response) = &snmpset($hostopt,$oid,'int',1); if ($response) { # print "$oid : $response\n"; } else { print "Failure setting $oid on $host\n"; exit; } # send it to this host #print "Setting destination ip address "; $oid = "ccCopyServerAddress." . $randomid; ($response) = &snmpset($hostopt,$oid,'ipaddr',$toHost); if ($response) { # print "$oid : $response\n"; } else { print "Failure setting $oid on $host\n"; exit; } # name to use # print "Setting config file name "; $oid = "ccCopyFileName." . $randomid; my $filename = $host . "." . $randomid; ($response) = &snmpset($hostopt,$oid,'string',$filename); if ($response) { # print "$oid : $response\n"; } else { print "Failure setting $oid on $host\n"; exit; } # GO GO GO print "Sending request to start copy operation "; $oid = "ccCopyEntryRowStatus." . $randomid; ($response) = &snmpset($hostopt,$oid,'int',1); if ($response) { print "$oid : $response\n"; } else { exit; } my $pollagain = 1; while ($pollagain) { my $pstatus = &waitForCompletion($hostopt); if ($pstatus eq 1) { print "Waiting\n"; } if ($pstatus eq 2) { print "Running\n"; } if ($pstatus eq 3) { print "Successful\n"; $pollagain = 0; } if ($pstatus eq 4) { print "Copy Failed\n"; $pollagain = 0; } sleep(1); } exit; #### EOP ### ############# sub waitForCompletion { my ($hostopt) = @_; my $oid = "ccCopyState." . $randomid; my $response; ($response) = &snmpget($hostopt, $oid); if ($response) { return $response; } else { print "$host did not respond to SNMP query\n"; exit; } }