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

SNMP编程

开发平台:

Visual C++

  1. /*
  2.   snmpTrap.cpp 
  3.   version 2.8
  4.   Copyright (c) 1996
  5.   Hewlett-Packard Company
  6.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  7.   Permission to use, copy, modify, distribute and/or sell this software
  8.   and/or its documentation is hereby granted without fee. User agrees
  9.   to display the above copyright notice and this license notice in all
  10.   copies of the software and any documentation of the software. User
  11.   agrees to assume all liability for the use of the software; Hewlett-Packard
  12.   makes no representations about the suitability of this software for any
  13.   purpose. It is provided "AS-IS" without warranty of any kind,either express
  14.   or implied. User hereby grants a royalty-free license to any and all
  15.   derivatives based upon this software code base.
  16.   Peter E. Mellquist
  17. */
  18. #include "snmp_pp.h"
  19. #include <iostream.h>
  20. #include <stdlib.h>
  21. #define COLDSTART "1.3.6.1.6.3.1.1.5.1"
  22. #define PAYLOADID "1.3.6.1.4.1.11.2.16.2"
  23. #define PAYLOAD "SNMP++ Trap Send Test"
  24. #define ENTERPRISE "1.3.6.1.2.1.1.1.2.0.1"
  25. int main( int argc, char **argv)  {
  26.    Oid ent(ENTERPRISE);               // default enterprise
  27.    //---------[ check the arg count ]----------------------------------------
  28.    if ( argc < 2) {
  29.   cout << "Usage:n";
  30.   cout << "snmpTrap Address | DNSName [Id] [options]n";
  31.   cout << "Id = default is 1.3.6.1.6.3.1.1.5.1 = ColdStartn";
  32.   cout << "options: -v1 , use SNMPV1, defaultn";
  33.   cout << "         -v2 , use SNMPV2n";
  34.   cout << "         -cCommunity_name, specify community default is 'public' n"; 
  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( COLDSTART);    // default is ColdStart 
  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.    OctetStr community("public");                        // trap community name to use
  56.    char *ptr; 
  57.    for(int x=1;x<argc;x++) {                           // parse for version
  58.       if ( strstr( argv[x],"-v2")!= 0)   
  59.          version = version2c;
  60.       if ( strstr( argv[x],"-c")!=0) {
  61.          ptr = argv[x]; ptr++; ptr++;
  62.    community = ptr;
  63.    }
  64.    }
  65.    //----------[ create a SNMP++ session ]-----------------------------------
  66.    int status; 
  67.    Snmp snmp( status);                // check construction status
  68.    if ( status != SNMP_CLASS_SUCCESS) {
  69.       cout << "SNMP++ Session Create Fail, " << snmp.error_msg(status) << "n";
  70.       return 0;
  71.    }
  72.    //--------[ build up SNMP++ object needed ]-------------------------------
  73.    Pdu pdu;                               // construct a Pdu object
  74.    Vb vb;                                 // variable binding object to use
  75.    vb.set_oid(PAYLOADID);                 // example oid for trap payload
  76.    vb.set_value(PAYLOAD);                 // example string for payload
  77.    pdu += vb;                             // append the vb to the pdu
  78.    pdu.set_notify_id( oid);               // set the id of the trap
  79.    pdu.set_notify_enterprise( ent);       // set up the enterprise of the trap
  80.    CTarget target( address);              // make a target using the address
  81.    target.set_version( version);          // set the SNMP version SNMPV1 or V2
  82.    target.set_readcommunity( community);  // set the community name to use 
  83.  
  84.    //-------[ Send the trap  ]------------------------------------------------
  85.    cout << "SNMP++ Trap to " << argv[1] << " SNMPV" << (version+1);
  86.    cout << " Community=" << community.get_printable() << "n"; 
  87.    status = snmp.trap( pdu,target);
  88.    cout << "SNMP++ Trap Send Status = " << snmp.error_msg( status) << "n";
  89.    return 0;
  90. }  // end snmpTrap