scarfconf.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:4k
- #!/usr/local/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 $hostn";
- ($response) = &snmpget($hostopt, $oid);
- if ($response) {
- # print "$oid : $responsen";
- } else {
- print "$host did not respond to SNMP queryn";
- 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 : $responsen";
- } else {
- print "Failure setgging $oid on $hostn";
- exit;
- }
- # 4 is running-config
- # print "Setting source file type ";
- $oid = "ccCopySourceFileType." . $randomid;
- ($response) = &snmpset($hostopt,$oid,'int',4);
- if ($response) {
- # print "$oid : $responsen";
- } else {
- print "Failure setting $oid on $hostn";
- exit;
- }
- # 1 is netfile
- #print "Setting destination file type ";
- $oid = "ccCopyDestFileType." . $randomid;
- ($response) = &snmpset($hostopt,$oid,'int',1);
- if ($response) {
- # print "$oid : $responsen";
- } else {
- print "Failure setting $oid on $hostn";
- exit;
- }
- # send it to this host
- #print "Setting destination ip address ";
- $oid = "ccCopyServerAddress." . $randomid;
- ($response) = &snmpset($hostopt,$oid,'ipaddr',$toHost);
- if ($response) {
- # print "$oid : $responsen";
- } else {
- print "Failure setting $oid on $hostn";
- 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 : $responsen";
- } else {
- print "Failure setting $oid on $hostn";
- exit;
- }
- # GO GO GO
- print "Sending request to start copy operation ";
- $oid = "ccCopyEntryRowStatus." . $randomid;
- ($response) = &snmpset($hostopt,$oid,'int',1);
- if ($response) {
- print "$oid : $responsen";
- } else {
- exit;
- }
- my $pollagain = 1;
- while ($pollagain) {
- my $pstatus = &waitForCompletion($hostopt);
- if ($pstatus eq 1) {
- print "Waitingn";
- }
- if ($pstatus eq 2) {
- print "Runningn";
- }
- if ($pstatus eq 3) {
- print "Successfuln";
- $pollagain = 0;
- }
- if ($pstatus eq 4) {
- print "Copy Failedn";
- $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 queryn";
- exit;
- }
- }