scarfconf.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:4k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!/usr/local/bin/perl 
  2. #
  3. ###############################################################
  4. # Copyright 1999 Frontier GlobalCenter/Global Crossing
  5. # Copy/Use/Modification is fine please mention us in any mods and
  6. # send them to us. Also thanks to the perl snmp people!
  7. ###############################################################
  8. #
  9. # who to blame: pee@gblx.net Paul E. Erkkila
  10. #
  11. # A perl script to have a cisco router dump it's configs
  12. # to a tftp host
  13. #
  14. # To use this script I recommend  defining a view on the router 
  15. # that does NOT have full write such as
  16. #
  17. # snmp-server view configView system included
  18. # snmp-server view configView ciscoConfigCopyMIB included
  19. # snmp-server community [community name] view configView RW
  20. #
  21. # It needs to be RW so it can set table entries
  22. #
  23. # the CISCO-CONFIG-COPY mib is 12.x only as far as I
  24. # can tell
  25. #
  26. # $Author: oetiker $
  27. # $Id: scarfconf.pl,v 1.1.1.1 2002/02/26 10:16:32 oetiker Exp $
  28. # $Revision: 1.1.1.1 $
  29. #
  30. #
  31. require 5.003;
  32. use strict;
  33. ## snmp perl
  34. use SNMP_Session;
  35. use SNMP_util "0.71";
  36. use BER;
  37. my $host       = $ARGV[0] || die "useage: $0 target community toHost ID";
  38. my $community  = $ARGV[1] || die "useage: $0 target community toHost ID";
  39. my $toHost     = $ARGV[2] || die "useage: $0 target community toHost ID";
  40. my $randomid   = $ARGV[3] || die "useage: $0 target community toHost ID";
  41. &snmpmapOID("cicsoMgmt",            "1.3.6.1.4.1.9.9.96");
  42. &snmpmapOID("ccCopySourceFileType", "1.3.6.1.4.1.9.9.96.1.1.1.1.3");
  43. &snmpmapOID("ccCopyDestFileType",   "1.3.6.1.4.1.9.9.96.1.1.1.1.4");
  44. &snmpmapOID("ccCopyServerAddress",  "1.3.6.1.4.1.9.9.96.1.1.1.1.5");
  45. &snmpmapOID("ccCopyFileName",       "1.3.6.1.4.1.9.9.96.1.1.1.1.6");
  46. &snmpmapOID("ccCopyEntryRowStatus", "1.3.6.1.4.1.9.9.96.1.1.1.1.14");
  47. &snmpmapOID("ccCopyState",          "1.3.6.1.4.1.9.9.96.1.1.1.1.10");
  48. my ($oid,$response);
  49. #
  50. #  First a simple SNMP Get
  51. #
  52. my $hostopt = $community . "@" . $host;
  53. # get system uptime to see if it's actually working :)
  54. $oid = "sysUptime";
  55. # print "Getting $oid from $hostn";
  56. ($response) = &snmpget($hostopt, $oid);
  57. if ($response) {
  58. # print "$oid : $responsen";
  59. } else {
  60. print "$host did not respond to SNMP queryn";
  61. exit;
  62. }
  63. # build the table row
  64. # print "Sending Row Build (Create and Wait) ";
  65. $oid = "ccCopyEntryRowStatus." . $randomid;
  66. ($response) = &snmpset($hostopt,$oid,'int',5);
  67. if ($response) {
  68. #    print "$oid : $responsen";
  69. } else {
  70.     print "Failure setgging $oid on $hostn";
  71.     exit;
  72. }
  73. # 4 is running-config
  74. # print "Setting source file type ";
  75. $oid = "ccCopySourceFileType." . $randomid;
  76. ($response) = &snmpset($hostopt,$oid,'int',4);
  77. if ($response) {
  78. #    print "$oid : $responsen";
  79. } else {
  80.     print "Failure setting $oid on $hostn";
  81.     exit;
  82. }
  83. # 1 is netfile
  84. #print "Setting destination file type ";
  85. $oid = "ccCopyDestFileType." . $randomid;
  86. ($response) = &snmpset($hostopt,$oid,'int',1);
  87. if ($response) {
  88. #    print "$oid : $responsen";
  89. } else {
  90.     print "Failure setting $oid on $hostn";
  91.     exit;
  92. }
  93. # send it to this host
  94. #print "Setting destination ip address ";
  95. $oid = "ccCopyServerAddress." . $randomid;
  96. ($response) = &snmpset($hostopt,$oid,'ipaddr',$toHost);
  97. if ($response) {
  98. #    print "$oid : $responsen";
  99. } else {
  100.     print "Failure setting $oid on $hostn";
  101.     exit;
  102. }
  103. # name to use
  104. # print "Setting config file name ";
  105. $oid = "ccCopyFileName." . $randomid;
  106. my $filename = $host . "." . $randomid;
  107. ($response) = &snmpset($hostopt,$oid,'string',$filename);
  108. if ($response) {
  109. #    print "$oid : $responsen";
  110. } else {
  111.     print "Failure setting $oid on $hostn";
  112.     exit;
  113. }
  114. # GO GO GO
  115. print "Sending request to start copy operation ";
  116. $oid = "ccCopyEntryRowStatus." . $randomid;
  117. ($response) = &snmpset($hostopt,$oid,'int',1);
  118. if ($response) {
  119.     print "$oid : $responsen";
  120. } else {
  121.    exit;
  122. }
  123. my $pollagain = 1;
  124. while ($pollagain) {
  125. my $pstatus = &waitForCompletion($hostopt);
  126. if ($pstatus eq 1) {
  127.     print "Waitingn";
  128. }
  129. if ($pstatus eq 2) {
  130.     print "Runningn";
  131. }
  132. if ($pstatus eq 3) {
  133.     print "Successfuln";
  134.     $pollagain = 0; 
  135. }
  136. if ($pstatus eq 4) {
  137.     print "Copy Failedn";
  138.     $pollagain = 0;
  139. }
  140. sleep(1);
  141. }
  142. exit;
  143. #### EOP  ###
  144. #############
  145. sub waitForCompletion {
  146. my ($hostopt) = @_;
  147. my $oid = "ccCopyState." . $randomid;
  148. my $response;
  149. ($response) = &snmpget($hostopt, $oid);
  150. if ($response) {
  151. return $response;
  152. } else {
  153. print "$host did not respond to SNMP queryn";
  154. exit;
  155. }
  156. }