| The Python 'netsnmp' Extension Module |
| for the Net-SNMP Library |
| |
| Contents: |
| Introduction: |
| Availability: |
| Contact: |
| Supported Platforms: |
| Release Notes: |
| Installation: |
| Operational Description: |
| Trouble Shooting: |
| Acknowledgments: |
| License/Copyright: |
| |
| Introduction: |
| |
| This is the Python 'netsnmp' extension module. The 'netsnmp' module |
| provides a full featured, tri-lingual SNMP (SNMPv3, SNMPv2c, |
| SNMPv1) client API. The 'netsnmp' module internals rely on the |
| Net-SNMP toolkit library. For information on the Net-SNMP library |
| see the documentation provided with the Net-SNMP distribution or |
| the project web page available on 'Source Forge': |
| |
| http://www.net-snmp.org/ |
| |
| Availability: |
| |
| The most recent release of the Python 'netsnmp' module can be found |
| bundled with the latest Net-SNMP distribution available from: |
| |
| http://www.net-snmp.org/download.html |
| |
| Contact: |
| |
| The following mailing list should be consider the primary support |
| mechanism for this module: |
| |
| net-snmp-users@lists.sourceforge.net mail list |
| |
| (see http://www.net-snmp.org/lists/users/ to subscribe) |
| |
| Supported Platforms: |
| |
| Linux 2.x |
| Other UNIX/POSIX variants (untested) |
| MS Windows (untested) |
| |
| Let us know where it *doesn't* work, as it should on most systems |
| |
| Release Notes: |
| |
| This initial alpha release of the Python 'netsnmp' extension module |
| has been developed against net-snmp 5.4.pre1. |
| |
| Only syncronous, client-side functionality is implemented. |
| |
| Access to the parsed MIB database is not yet implemented. |
| |
| KNOWN BUGS: |
| |
| Too many to mention at this point |
| |
| Installation: |
| |
| Build and install the Net-SNMP package - see Net-SNMP README and |
| INSTALL docs. |
| |
| Unix: |
| |
| cd net-snmp/python |
| python setup.py build |
| python setup.py test (requires a locally running agent w/ config provided) |
| python setup.py install |
| |
| |
| Operational Description: |
| |
| The basic operations of the SNMP protocol are provided by this |
| module through an object oriented interface for modularity and ease |
| of use. The primary class is netsnmp.Session which encapsulates |
| the persistent aspects of a connection between the management |
| application and the managed agent. This class supplies 'get', |
| 'getnext', 'getbulk', 'set' and other method calls. |
| |
| A description of the fields which can be specified when instantiating an |
| netsnmp.Session follows: |
| |
| netsnmp.Session(<tag>=<value>, ... ) |
| |
| DestHost - default 'localhost', hostname or ip addr of SNMP agent |
| Version - default '3', [1, 2 (equiv to 2c), 3] |
| RemotePort - default '161', allow remote UDP port to be overridden |
| Timeout - default '500000', micro-seconds before retry |
| Retries - default '3', retries before failure |
| RetryNoSuch - default '0', if enabled NOSUCH errors in 'get' pdus will |
| be repaired, removing the varbind in error, and resent - |
| undef will be returned for all NOSUCH varbinds, when set |
| to '0' this feature is disabled and the entire get request |
| will fail on any NOSUCH error (applies to v1 only) |
| UseLongNames - set to non-zero to have <tags> for 'getnext' methods |
| generated preferring longer Mib name convention (e.g., |
| system.sysDescr vs just sysDescr) |
| UseSprintValue - set to non-zero to have return values |
| for 'get' and 'getnext' methods formatted with the libraries |
| sprint_value function. This will result in certain data types |
| being returned in non-canonical format Note: values returned |
| with this option set may not be appropriate for 'set' |
| operations (see discussion of value formats in <vars> |
| description section) |
| UseEnums - set to non-zero to have integer return values |
| converted to enumeration identifiers if possible, |
| these values will also be acceptable when supplied to |
| 'set' operations |
| UseNumeric - set to non-zero to have <tags> returned by the 'get' |
| methods untranslated (i.e. dotted-decimal). Setting the |
| UseLongNames value for the session is highly recommended. |
| BestGuess - this setting controls how <tags> are parsed. setting |
| to 0 causes a regular lookup. setting to 1 causes a regular |
| expression match (defined as -Ib in snmpcmd). setting to 2 |
| causes a random access lookup (defined as -IR in snmpcmd). |
| ErrorStr - read-only, holds the error message assoc. w/ last request |
| ErrorNum - read-only, holds the snmp_err or status of last request |
| ErrorInd - read-only, holds the snmp_err_index when appropriate |
| |
| SNMPv1/SNMPv2c options: |
| Community - default 'public', SNMP community string (used for both R/W) |
| |
| SNMPv3 Options: |
| SecName - default 'initial', security name (v3) |
| SecLevel - default 'noAuthNoPriv', security level [noAuthNoPriv, |
| authNoPriv, authPriv] (v3) |
| ContextEngineId - default <SecEngineId>, context engineID, will be |
| probed if not supplied (v3) |
| Context - default '', context name (v3) |
| |
| SNMPv3 over TLS or DTLS options: |
| OurIdentity - The fingerprint or file name for the local X.509 |
| certificate to use for our identity. Run |
| net-snmp-cert to create and manage certificates. |
| TheirIdentity - The fingerprint or file name for the local X.509 |
| certificate to use for their identity. |
| TrustCert - A trusted certificate to use for validating |
| certificates. Typically this would be a CA |
| certificate. |
| TheirHostname - Their hostname to expect. Either "TheirIdentity" |
| or a trusted certificate plus a hostname is needed |
| to validate the server is the proper server. |
| |
| SNMPv3 with USM security Options: |
| SecEngineId - default <none>, security engineID, will be probed if not |
| supplied (v3) |
| AuthProto - default 'MD5', authentication protocol [MD5, SHA] (v3) |
| AuthPass - default <none>, authentication passphrase |
| PrivProto - default 'DES', privacy protocol [DES] (v3) |
| PrivPass - default <none>, privacy passphrase (v3) |
| |
| private: |
| sess_ptr - internal field used to cache a created session structure |
| |
| methods: |
| |
| get(<netsnmp.VarList object>) |
| - SNMP GET a netsnmp.VarList object must be supplied, |
| returns a tuple of values for each varbind in list |
| |
| getnext(<netsnmp.VarList object>) |
| - SNMP GETNEXT, a netsnmp.VarList object must be supplied |
| returns retrieved value(s), VarList passed as arguments |
| are updated to return a list of next lexicographical |
| Varbind objects. returns a tuple of values for each |
| varbind in list |
| |
| set(<netsnmp.VarList object>) |
| - SNMP SET, a netsnmp.VarList object must be supplied |
| the value field in all Varbinds must be in a canonical |
| format (i.e., well known format) to ensure unambiguous |
| translation to SNMP MIB data value (see discussion of |
| canonical value format <vars> description section), |
| returns true on success or None on error. |
| |
| getbulk(<non-repeaters>, <max-repeaters>, <netsnmp.VarList object>) |
| - SNMP GETBULK, a netsnmp.VarList object must be supplied |
| the single next lexico instance is fetched for the first |
| n Varbinds in the list as defined by <non-repeaters>. |
| For the remaining Varbinds, the next m lexico instances |
| are retrieved each of the remaining Varbinds, |
| where m is <max-repeaters>. Returns a tuple of values |
| retrieved. |
| |
| walk(<netsnmp.VarList object>) |
| - Performs multiple GETNEXT requests in order to |
| return a tuple of values retrieved from the MIB |
| below the Varbind passed in. The VarList passed |
| in will be updated to contain a complete set of |
| Varbinds created for the results of the walk. |
| |
| Note that only one varbind should be contained in the |
| VarList passed in. The code is structured to maybe |
| handle this is the the future, but right now walking |
| multiple trees at once is not yet supported and will |
| produce insufficient results. |
| |
| |
| Acceptable variable formats: |
| |
| netsnmp.VarList: - represents an list of Varbind objects to get or set. |
| takes are arguments and unspecified number of Varbinds, |
| or tuples which will be converted to Varbinds. |
| |
| |
| netsnmp.Varbind: - represents a single MIB object to get or set |
| implemented as Python[<tag>, <iid>, <val>, <type>]. |
| <tag> - one of the following forms: |
| 1) leaf identifier (e.g., 'sysDescr') assumed to be |
| unique for practical purposes |
| 2) fully qualified identifier (e.g., |
| '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr') |
| 3) fully qualified, dotted-decimal, numeric OID |
| (e.g., '.1.3.6.1.2.1.1.1') |
| <iid> - the dotted-decimal, instance identifier. for |
| scalar MIB objects use '0' |
| <val> - the SNMP data value retrieved from or being set |
| to the agents MIB. for set operations the <val> |
| format must be canonical to ensure unambiguous |
| translation. The canonical forms are as follows: |
| OBJECTID => dotted-decimal (e.g., .1.3.6.1.2.1.1.1) |
| OCTETSTR => perl scalar containing octets, |
| INTEGER => decimal signed integer (or enum), |
| NETADDR => dotted-decimal, |
| IPADDR => dotted-decimal, |
| COUNTER => decimal unsigned integer, |
| COUNTER64 => decimal unsigned integer, |
| GAUGE, => decimal unsigned integer, |
| UINTEGER, => decimal unsigned integer, |
| TICKS, => decimal unsigned integer, |
| OPAQUE => perl scalar containing octets, |
| NULL, => perl scalar containing nothing, |
| |
| <type> - SNMP data type (see list above), this field is |
| populated by 'get' and 'getnext' operations. In |
| some cases the programmer needs to populate this |
| field when passing to a 'set' operation. this |
| field need not be supplied when the attribute |
| indicated by <tag> is already described in the |
| parsed MIB. for 'set's, if a numeric OID is used |
| and the object is not in the parsed MIB, |
| the <type> field must be supplied |
| |
| |
| Python 'netsnmp' package variables and functions: |
| |
| |
| netsnmp.verbose - default '0', |
| controls warning/info output of themodule |
| 0 => no output, |
| 1 => enables warning/info |
| |
| (needs implementation) |
| $SNMP::debugging - default '0', controls debugging output level |
| within SNMP module and libsnmp |
| 1 => enables 'SNMP::verbose' (see above) |
| 2 => level 1 plus snmp_set_do_debugging(1), |
| 3 => level 2 plus snmp_set_dump_packet(1) |
| |
| $SNMP::dump_packet - default '0', set [non-]zero to independently set |
| snmp_set_dump_packet() |
| |
| Exported 'netsnmp' package utility functions: |
| |
| snmpget(<Varbind/VarList>, <Session args>) |
| - takes args of netsnmp.Session preceded by those of the |
| corresponding netsnmp.Session method. Returns a tuple with |
| Varbind values fetched, and input is updated to contain |
| complete Varbinds fetched. |
| |
| snmpgetnext(<Varbind/VarList>, <Session args>) |
| - takes args of netsnmp.Session preceded by those of the |
| corresponding netsnmp.Session method. Returns a tuple with |
| Varbind values fetched, and input is updated to contain |
| complete Varbinds fetched. |
| |
| snmpgetbulk(nonrepeaters, maxrepetitions,<VarList>, <Session args>) |
| - takes args of netsnmp.Session preceded by those of the |
| corresponding netsnmp.Session method. Returns a tuple with |
| Varbind values fetched, and VarList is updated to contain |
| complete Varbinds fetched. |
| |
| snmpset(<Varbind/VarList>, <Session args>) |
| - takes args of netsnmp.Session preceded by those of the |
| corresponding netsnmp.Session method. returns True on success, |
| otherwise False. |
| |
| snmpwalk(<Varbind/VarList>, <Session args>)) |
| - takes args of netsnmp.Session preceded by a Varbind or |
| VarList from which the 'walk' operation will start. |
| Returns a tuple of values retrieved from the MIB below |
| the Varbind passed in. If a VarList is passed in it |
| will be updated to contain a complete set of VarBinds |
| created for the results of the walk. It is not |
| recommended to pass in just a Varbind since you loose |
| the ability to examine the returned OIDs. But, if only |
| a Varbind is passed in it will be returned unaltered. |
| |
| Note that only one varbind should be contained in the |
| VarList passed in. The code is structured to maybe |
| handle this is the the future, but right now walking |
| multiple trees at once is not yet supported and will |
| produce insufficient results. |
| |
| Trouble Shooting: |
| |
| If problems occur there are number areas to look at to narrow down the |
| possibilities. |
| |
| The first step should be to test the Net-SNMP installation |
| independently from the Python 'netsnmp' Extension. |
| |
| Try running the apps from the Net-SNMP distribution. |
| |
| Make sure your agent (snmpd) is running and properly configured with |
| read-write access for the community you are using. |
| |
| Ensure that your MIBs are installed and environment variables are set |
| appropriately (see man mib_api) |
| |
| Be sure to ensure headers and libraries from old CMU installations are |
| not being used by mistake (see -NET-SNMP-PATH). |
| |
| If the problem occurs during compilation/linking check that the snmp |
| library being linked is actually the Net-SNMP library (there have been |
| name conflicts with existing snmp libs). |
| |
| Also check that the header files are correct and up to date. |
| |
| Sometimes compiling the Net-SNMP library with |
| 'position-independent-code' enabled is required (HPUX specifically). |
| |
| If you cannot resolve the problem you can email |
| net-snmp-users@lists.sourceforge.net. |
| |
| Please give sufficient information to analyze the problem (OS type, |
| versions for OS/python/net-SNMP/compiler, complete error output, etc.) |
| |
| Acknowledgments: |
| |
| Giovanni Marzot (the original author) |
| ScienceLogic, LLC sponsored the initial development of this module. |
| Wes Hardaker and the net-snmp-coders |
| |
| Thanks in advance to any who supply patches, suggestions and feedback. |
| |
| License: |
| |
| Please see the LICENSE file contained with this package |
| |
| Copyright: |
| |
| Copyright (c) 2006 G. S. Marzot. All rights reserved. |
| This program is free software; you can redistribute it and/or |
| modify it under the same terms as Net-SNMP itself. |
| |
| Copyright (c) 2006 SPARTA, Inc. All Rights Reserved. This |
| program is free software; you can redistribute it and/or modify |
| it under the same terms as Net-SNMP itself. |