366 lines
16 KiB
Plaintext
366 lines
16 KiB
Plaintext
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.
|