snmpBulk.cpp
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*
  2.   snmpBulk.cpp 
  3.   version 2.8
  4.   
  5.   Copyright (c) 1996
  6.   Hewlett-Packard Company
  7.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  8.   Permission to use, copy, modify, distribute and/or sell this software
  9.   and/or its documentation is hereby granted without fee. User agrees
  10.   to display the above copyright notice and this license notice in all
  11.   copies of the software and any documentation of the software. User
  12.   agrees to assume all liability for the use of the software; Hewlett-Packard
  13.   makes no representations about the suitability of this software for any
  14.   purpose. It is provided "AS-IS" without warranty of any kind,either express
  15.   or implied. User hereby grants a royalty-free license to any and all
  16.   derivatives based upon this software code base.
  17.   Peter E. Mellquist
  18. */
  19. #include "snmp_pp.h"
  20. #include <iostream.h>
  21. #include <stdlib.h>
  22. int main( int argc, char **argv)  {
  23.    //---------[ check the arg count ]----------------------------------------
  24.    if ( argc < 2) {
  25.   cout << "Usage:n";
  26.   cout << "snmpBulk Address | DNSName [Oid] [options]n";
  27.   cout << "Oid: sysDescr object is defaultn";
  28.   cout << "options: -v1 , use SNMPV1, defaultn";
  29.   cout << "         -v2 , use SNMPV2n";
  30.   cout << "         -cCommunity_name, specify community default is 'public' n";
  31.   cout << "         -rN , retries default is N = 1 retryn";
  32.   cout << "         -tN , timeout in hundredths-seconds default is N = 100 = 1 secondn";
  33.   cout << "         -nN , non-repeaters default is N = 0n";
  34.   cout << "         -mN , max-repetitions default is  N = 1n";
  35.   return 0;
  36.    }
  37.    //---------[ make a GenAddress and Oid object to retrieve ]---------------
  38.    GenAddress address( argv[1]);      // make a SNMP++ Generic address
  39.    if ( !address.valid()) {           // check validity of address
  40.   cout << "Invalid Address or DNS Name, " << argv[1] << "n";
  41.   return 0;
  42.    }
  43.    Oid oid("1.3.6.1.2.1.1.1");      // defualt is sysDescr
  44.    if ( argc >= 3) {                  // if 3 args, then use the callers Oid
  45.   if ( strstr( argv[2],"-")==0) {
  46.      oid = argv[2];
  47.      if ( !oid.valid()) {            // check validity of user oid
  48.     cout << "Invalid Oid, " << argv[2] << "n";
  49.     return 0;
  50.          }
  51.       }
  52.    }
  53.    //---------[ determine options to use ]-----------------------------------
  54.    snmp_version version=version1;                       // default is v1
  55.    int retries=1;                                       // default retries is 1
  56.    int timeout=100;                                     // default is 1 second
  57.    OctetStr community("public");                        // read community to use
  58.    int non_reps=0;                                      // non repeaters default is 0
  59.    int max_reps=1;                                      // maximum repetitions default is 1
  60.    char *ptr;
  61.    for(int x=1;x<argc;x++) {                           // parse for version
  62.       if ( strstr( argv[x],"-v2")!= 0)   
  63.          version = version2c;
  64.       if ( strstr( argv[x],"-r")!= 0) {                 // parse for retries
  65.          ptr = argv[x]; ptr++; ptr++;
  66.  retries = atoi(ptr);
  67.  if (( retries<1)|| (retries>5)) retries=1; 
  68.       }
  69.   if ( strstr( argv[x], "-t")!=0) {                 // parse for timeout
  70.  ptr = argv[x]; ptr++; ptr++; 
  71.  timeout = atoi( ptr);
  72.  if (( timeout < 100)||( timeout>500)) timeout=100;
  73.       }
  74.   if ( strstr( argv[x],"-n")!=0) {                 // parse for non repeaters
  75.  ptr = argv[x];ptr++;ptr++;
  76.  non_reps=atoi( ptr);
  77.  if (( non_reps < 0)||( non_reps>10)) non_reps=0;
  78.       }
  79.   if ( strstr( argv[x],"-m")!=0) {                 // parse for max repetitions 
  80.  ptr = argv[x];ptr++;ptr++;
  81.  max_reps=atoi( ptr);
  82.  if (( non_reps < 0)||( non_reps>10)) max_reps=1;
  83.   }
  84.       if ( strstr( argv[x],"-c")!=0) {
  85.          ptr = argv[x]; ptr++; ptr++;
  86.          community = ptr;
  87.       }
  88.    }
  89.    //----------[ create a SNMP++ session ]-----------------------------------
  90.    int status; 
  91.    Snmp snmp( status);                // check construction status
  92.    if ( status != SNMP_CLASS_SUCCESS) {
  93.       cout << "SNMP++ Session Create Fail, " << snmp.error_msg(status) << "n";
  94.       return 0;
  95.    }
  96.    //--------[ build up SNMP++ object needed ]-------------------------------
  97.    Pdu pdu;                              // construct a Pdu object
  98.    Vb vb;                                // construct a Vb object
  99.    vb.set_oid( oid);                     // set the Oid portion of the Vb
  100.    pdu += vb;                            // add the vb to the Pdu
  101.    CTarget target( address);             // make a target using the address
  102.    target.set_version( version);         // set the SNMP version SNMPV1 or V2
  103.    target.set_retry( retries);           // set the number of auto retries
  104.    target.set_timeout( timeout);         // set timeout
  105.    target.set_readcommunity( community); // set the read community name
  106.    target.set_writecommunity( community);// set the write community name
  107.    //-------[ issue the request, blocked mode ]-----------------------------
  108.    cout << "SNMP++ GetBulk to " << argv[1] << " SNMPV" << (version+1) << " Retries=" << retries;
  109.    cout << " Timeout=" << timeout << "ms" << " Non Reptrs=" << non_reps;
  110.    cout << " Max Reps=" << max_reps << " Community=" << community.get_printable() << "n";
  111.    if (( status = snmp.get_bulk( pdu,target,non_reps,max_reps))== SNMP_CLASS_SUCCESS) {
  112.   for ( int z=0;z<pdu.get_vb_count();z++) {
  113.      pdu.get_vb( vb,z);
  114.      cout << "Oid = " << vb.get_printable_oid() << "n";
  115.      cout << "Value = " << vb.get_printable_value() << "nn";
  116.       }
  117.    }
  118.    else {
  119.   cout << "SNMP++ GetBulk Error, ";
  120.   if ( status == SNMP_CLASS_ERR_STATUS_SET)
  121.   status = pdu.get_error_status();
  122.   cout << snmp.error_msg( status) << "n";
  123.    }
  124.    return 0;
  125. }  // end getBulk