snmpNext.cpp
资源名称:hp_snmp3.zip [点击查看]
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:5k
源码类别:
SNMP编程
开发平台:
Visual C++
- /*
- snmpNext.cpp
- version 2.8
- Copyright (c) 1996
- Hewlett-Packard Company
- ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
- Permission to use, copy, modify, distribute and/or sell this software
- and/or its documentation is hereby granted without fee. User agrees
- to display the above copyright notice and this license notice in all
- copies of the software and any documentation of the software. User
- agrees to assume all liability for the use of the software; Hewlett-Packard
- makes no representations about the suitability of this software for any
- purpose. It is provided "AS-IS" without warranty of any kind,either express
- or implied. User hereby grants a royalty-free license to any and all
- derivatives based upon this software code base.
- Peter E. Mellquist
- */
- #include "snmp_pp.h"
- #include <iostream.h>
- #include <stdlib.h>
- int main( int argc, char **argv) {
- //---------[ check the arg count ]----------------------------------------
- if ( argc < 2) {
- cout << "Usage:n";
- cout << "snmpNext Address | DNSName [Oid] [options]n";
- cout << "Oid: sysDescr object is defaultn";
- cout << "options: -v1 , use SNMPV1, defaultn";
- cout << " -v2 , use SNMPV2n";
- cout << " -cCommunity_name, specify community default is 'public' n";
- cout << " -rN , retries default is N = 1 retryn";
- cout << " -tN , timeout in hundredths-seconds default is N = 100 = 1 secondn";
- return 0;
- }
- //---------[ make a GenAddress and Oid object to retrieve ]---------------
- GenAddress address( argv[1]); // make a SNMP++ Generic address
- if ( !address.valid()) { // check validity of address
- cout << "Invalid Address or DNS Name, " << argv[1] << "n";
- return 0;
- }
- Oid oid("1.3.6.1.2.1.1.1"); // defualt is sysDescr
- if ( argc >= 3) { // if 3 args, then use the callers Oid
- if ( strstr( argv[2],"-")==0) {
- oid = argv[2];
- if ( !oid.valid()) { // check validity of user oid
- cout << "Invalid Oid, " << argv[2] << "n";
- return 0;
- }
- }
- }
- //---------[ determine options to use ]-----------------------------------
- snmp_version version=version1; // default is v1
- int retries=1; // default retries is 1
- int timeout=100; // default is 1 second
- OctetStr community("public"); // read community to use
- char *ptr;
- for(int x=1;x<argc;x++) { // parse for version
- if ( strstr( argv[x],"-v2")!= 0)
- version = version2c;
- if ( strstr( argv[x],"-r")!= 0) { // parse for retries
- ptr = argv[x]; ptr++; ptr++;
- retries = atoi(ptr);
- if (( retries<1)|| (retries>5)) retries=1;
- }
- if ( strstr( argv[x], "-t")!=0) { // parse for timeout
- ptr = argv[x]; ptr++; ptr++;
- timeout = atoi( ptr);
- if (( timeout < 100)||( timeout>500)) timeout=100;
- }
- if ( strstr( argv[x],"-c")!=0) {
- ptr = argv[x]; ptr++; ptr++;
- community = ptr;
- }
- }
- //----------[ create a SNMP++ session ]-----------------------------------
- int status;
- Snmp snmp( status); // check construction status
- if ( status != SNMP_CLASS_SUCCESS) {
- cout << "SNMP++ Session Create Fail, " << snmp.error_msg(status) << "n";
- return 0;
- }
- //--------[ build up SNMP++ object needed ]-------------------------------
- Pdu pdu; // construct a Pdu object
- Vb vb; // construct a Vb object
- vb.set_oid( oid); // set the Oid portion of the Vb
- pdu += vb; // add the vb to the Pdu
- CTarget target( address); // make a target using the address
- target.set_version( version); // set the SNMP version SNMPV1 or V2
- target.set_retry( retries); // set the number of auto retries
- target.set_timeout( timeout); // set timeout
- target.set_readcommunity( community); // set the read community to use
- //-------[ issue the request, blocked mode ]-----------------------------
- cout << "SNMP++ GetNext to " << argv[1] << " SNMPV" << (version+1) << " Retries=" << retries;
- cout << " Timeout=" << timeout <<"ms " << "Community=" << community.get_printable() << "n";
- if (( status = snmp.get_next( pdu,target))== SNMP_CLASS_SUCCESS) {
- pdu.get_vb( vb,0);
- cout << "Oid = " << vb.get_printable_oid() << "n";
- cout << "Value = " << vb.get_printable_value() << "n";
- }
- else {
- cout << "SNMP++ GetNext Error, ";
- if ( status == SNMP_CLASS_ERR_STATUS_SET)
- status = pdu.get_error_status();
- cout << snmp.error_msg( status) << "n";
- }
- return 0;
- } // end get