Data Types¶
ASN.1 Data Types¶
- class ASN1¶
This is the abstract base class for all ASN.1 data types in this library. It defines the following two methods, which implement ASN.1 encoding and decoding under the Basic Encoding Rules (BER):
- classmethod decode(data, leftovers=False)¶
Create a new object by decoding it from the byte string data. In the default case, this method expects to consume the entire string. If data encodes multiple objects, then leftovers should be set to
True, in which case the leftover portion of the data will be returned as well (i.e. it will return a tuple containing both the decoded object and the leftover data).If the data cannot be decoded as requested, a
snmp.ber.ParseErrorwill be raised.
- encode()¶
Encode an object into a byte-string. This method is not expected to raise any exceptions.
Core Data Types¶
- class snmp.smi.Integer(value)¶
This class represents an ASN.1 INTEGER, which is restricted to a 32-bit signed integer by the SNMP SMIv2 (see RFC 2578#section-2).
- property value¶
The object’s value as a native
int.
- __eq__(self, other)¶
Two INTEGER types are equal if they have the same value and the same ASN.1 tag. For example, an
Unsignedand aGauge32with the same value are equal, but anUnsignedis never equal to anInteger.
- class snmp.smi.OctetString(data)¶
This class represents an ASN.1 OCTET STRING, which is restricted to a maximum of 65535 octets in length by the SNMP SMIv2 (see RFC 2578#section-2).
- property data¶
The object’s raw data as a bytes-like object.
- __eq__(self, other)¶
Two OCTET STRINGs are equal if they represent the same bytes and use the same ASN.1 tag.
- class snmp.smi.Null¶
This class represents the built-in ASN.1 NULL type. It is also the base class for types like
EndOfMibView.- __eq__(self, other)¶
Two NULL objects are equal if they have the same ASN.1 tag.
- class snmp.smi.OID(*subidentifiers)¶
This class represents an ASN.1 Object Identifier. An object identifier is a sequence of up to 128 integers (called sub-identifiers) that describe a path to a node in the MIB tree. For an explanation of the MIB tree, consult RFC 2578. Object identifiers are normally expressed in string by placing a dot between each sub-identifier, like this:
"1.3.6.1.2.1.1.1".Sub-identifiers are limited to the range
0to(2^32)-1, with the exception of the first two; the first must be between0and2, and the second must be between0and39. Because of the encoding rules, it is not possible to send an OID with less than two sub-identifiers. This class can be instantiated with zero or one sub-identifiers, but, when encoded, will be treated as if there were implicit zeros at the end.- classmethod parse(oid)¶
This method serves as an alternate way to call the constructor. It parses an OID string (e.g.
"1.3.6.1.2.1.1.1") and returns anOIDobject. OID strings may also contain a leading dot before the first sub-identifier.
- __str__()¶
Return the standard dot-separated representation of the OID.
- __lt__(other)¶
Compare two OIDs lexicographically (that’s the word the RFCs use).
- __len__()¶
Return the number of sub-identifiers in the OID.
- __getitem__(n)¶
The square bracket operator returns sub-identifier n, or raises and
IndexError. n may also be aslice, in which case the result is a tuple.
- __iter__()¶
Return an object to iterate over the sub-identifiers.
- extend(*subidentifiers)¶
Append the given sub-identifiers to the OID and return it as a new object.
- withIndex(*index, implied=False)¶
Every SNMP object is identified by an OID with a format of <prefix>.<index>, where the prefix refers to an object type definied in the MIB, and the index encodes one or more primitive objects. This is explained in RFC 1157#section-3.2.6.3.
This method encodes the given object(s), as outlined in RFC 2578#section-7.7, and appends the encoding(s) to the end of the OID, returning a new object. For an
INDEXwith theIMPLIEDkeyword attached to the final object, set the implied parameter toTrue.
- decodeIndex(prefix, *types, implied=False)¶
This method is the reverse of
withIndex(). The prefix argument is an OID referring to an object definition in the MIB, and the types argument gives the expected type of each object in the index. Most indices contain a single object, in which case thegetIndex()wrapper function may be more convenient.If the OID does not begin with the given prefix, this method will raise a
snmp.smi.OID.BadPrefixexception. If the prefix does match, but the index cannot be decoded, it will raise ansnmp.smi.OID.IndexDecodeError. The index is returned as a tuple whose length matches the length of types.The ‘implied’ argument affects the decoding of
OctetStringandOIDobjects. The encoding normally begins with a length byte, but the MIB may mark the final object in anINDEXwith theIMPLIEDkeyword, indicating that the encoding occupies the remainder of the OID.
- getIndex(prefix, cls=Integer, implied=False)¶
This method wraps a call to
decodeIndex()for an index consisting of only a single object. Where that method returns a tuple of length 1, this method returns the object directly.
- startswith(prefix)¶
Similar to
str.startswith(), this method checks whether an OID begins with prefix, indicating that prefix represents a parent node in the conceptual MIB tree.
Additional Data Types¶
- class snmp.smi.Unsigned(value)¶
An INTEGER with a value between
0and(2^32)-1.- property value¶
- __eq__(self, other)¶
See
Integer.__eq__().
- class snmp.smi.Integer32(value)¶
snmp.smi.Integeris an alias for Integer32.- property value¶
- class snmp.smi.Unsigned32(value)¶
snmp.smi.Unsignedis an alias for Unsigned32.- property value¶
- class snmp.smi.IpAddress(addr)¶
An IPv4 address.
- property addr¶
The address in human-readable “X.X.X.X” format.
- property data¶
A byte string encoding the address in network format.
- __eq__(self, other)¶
Two
IpAddresses are equal if they represent the same address.
- class snmp.smi.Counter32(value)¶
An INTEGER with a value between
0and(2^32)-1, used to represent monotonically increasing values that wrap to zero upon overflow.- property value¶
- __eq__(self, other)¶
See
Integer.__eq__().
- class snmp.smi.Gauge32(value)¶
An INTEGER with a value between
0and(2^32)-1, used to represent values within a specific range that do not wrap.- property value¶
- __eq__(self, other)¶
See
Integer.__eq__().
- class snmp.smi.TimeTicks(value)¶
An INTEGER with a value between
0and(2^32)-1, used to represent time measurements in hundredths of a second.- property value¶
- __eq__(self, other)¶
See
Integer.__eq__().
PDU Data Types¶
- class snmp.pdu.NoSuchObject¶
A special value sent in a response to indicate that the requested OID is unknown to the remote engine.
- class snmp.pdu.NoSuchInstance¶
A special value sent in a response to indicate that there is no object associated with the requested OID.
- class snmp.pdu.EndOfMibView¶
A special value sent in response to a Get-Next or Get-Bulk request to indicate that there are no more objects to return.
- class snmp.pdu.VarBind(name, value=None)¶
An SNMP variable binding pairs an OID with a value. In actual usage, the OID (i.e. the “name”) consists of a prefix, which refers to an object definition in the MIB, and an index, identifying a unique instance of that object for a specific engine. The value is an instance of the type specified in the object definition. For requests, the “name” may be any OID, and the value should be
Null.The name argument to the constructor may either be an
OIDobject, or it may be an OID string. The value may be any SNMP object, orNone, for aNullvalue.- property name¶
The “name” of the variable, which is an OID.
- property value¶
The variable’s value, which is some instance of
Asn1Encodable.
- class snmp.pdu.VarBindList(*args)¶
A VarBindList is a container for
VarBindobjects. The constructor accepts any number of VarBinds, OIDs, or OID strings.- __len__()¶
Return the number of variable bindings in this list.
- __getitem__(n)¶
Retrieve a variable binding, or a tuple of variable bindings, from the list.
- __iter__()¶
Return an object to iterate over the variable bindings in this list.
- class snmp.pdu.PDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
SNMP defines several different Protocol Data Units (PDUs), each representing a specific operation, or message type. All PDUs follow the same structure, with three Integer fields containing metadata, and a list of variable bindings (VarBindList). Each variable binding consists of a name and a value, as described in the
VarBindclass documentation. This is the base class for all PDU types, except forGetBulkRequestPDU, which uses its metadata fields differently than the others.When constructing a PDU object, the variable bindings are provided as positional arguments. These may be instances of
VarBind, but they can also be OIDs, either as anOIDobject, or in string format. If OIDs are used, then the VarBinds will be populated withNullvalues.- property requestID¶
The request ID is an arbitrary number used to match up responses to requests.
- property errorStatus¶
A non-zero error status in a response indicates that an error occured in the processing of the request. Allowable error status values, as well as their names, are enumerated in the
PDU.ErrorStatusclass. If the error relates to a specific variable binding, then theerrorIndexfield will also contain a non-zero value.
- property errorIndex¶
When a response contains a non-zero error status, this field indicates the source of the error. A value of
0indicates that the error relates to the message as a whole. A value greater than0gives the index of the variable binding that caused the error. Note that this means that index1refers to the first variable binding in the list.
- property variableBindings¶
This property gives access to the
VarBindListcontaining the message’s variable bindings.
- class ErrorStatus(errorStatus)¶
This
IntEnumclass enumerates the possible values of theerrorStatusfield. Note that some values are only valid in newer versions of SNMP.
- class snmp.pdu.GetRequestPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.GetNextRequestPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.ResponsePDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.SetRequestPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.TrapPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.GetBulkRequestPDU(*varbinds, requestID=0, nonRepeaters=0, maxRepetitions=0)¶
- property requestID¶
Same as
PDU.requestID.
- property nonRepeaters¶
This field is explained briefly on the Management Operations page.
- property maxRepetitions¶
This field is explained briefly on the Management Operations page.
- property variableBindings¶
Same as
PDU.variableBindings.
- class snmp.pdu.InformRequestPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.SNMPv2TrapPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶
- class snmp.pdu.ReportPDU(*varbinds, requestID=0, errorStatus=0, errorIndex=0)¶