1# 2# SNMPv1 message syntax 3# 4# ASN.1 source from: 5# http://www.ietf.org/rfc/rfc1157.txt 6# 7# Sample captures from: 8# http://wiki.wireshark.org/SampleCaptures/ 9# 10from pyasn1.type import univ, namedtype, namedval, tag, constraint 11from pyasn1_modules import rfc1155 12 13class Version(univ.Integer): 14 namedValues = namedval.NamedValues( 15 ('version-1', 0) 16 ) 17 defaultValue = 0 18 19class Community(univ.OctetString): pass 20 21class RequestID(univ.Integer): pass 22class ErrorStatus(univ.Integer): 23 namedValues = namedval.NamedValues( 24 ('noError', 0), 25 ('tooBig', 1), 26 ('noSuchName', 2), 27 ('badValue', 3), 28 ('readOnly', 4), 29 ('genErr', 5) 30 ) 31class ErrorIndex(univ.Integer): pass 32 33class VarBind(univ.Sequence): 34 componentType = namedtype.NamedTypes( 35 namedtype.NamedType('name', rfc1155.ObjectName()), 36 namedtype.NamedType('value', rfc1155.ObjectSyntax()) 37 ) 38class VarBindList(univ.SequenceOf): 39 componentType = VarBind() 40 41class _RequestBase(univ.Sequence): 42 componentType = namedtype.NamedTypes( 43 namedtype.NamedType('request-id', RequestID()), 44 namedtype.NamedType('error-status', ErrorStatus()), 45 namedtype.NamedType('error-index', ErrorIndex()), 46 namedtype.NamedType('variable-bindings', VarBindList()) 47 ) 48 49class GetRequestPDU(_RequestBase): 50 tagSet = _RequestBase.tagSet.tagImplicitly( 51 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0) 52 ) 53class GetNextRequestPDU(_RequestBase): 54 tagSet = _RequestBase.tagSet.tagImplicitly( 55 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1) 56 ) 57class GetResponsePDU(_RequestBase): 58 tagSet = _RequestBase.tagSet.tagImplicitly( 59 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2) 60 ) 61class SetRequestPDU(_RequestBase): 62 tagSet = _RequestBase.tagSet.tagImplicitly( 63 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3) 64 ) 65 66class TrapPDU(univ.Sequence): 67 componentType = namedtype.NamedTypes( 68 namedtype.NamedType('enterprise', univ.ObjectIdentifier()), 69 namedtype.NamedType('agent-addr', rfc1155.NetworkAddress()), 70 namedtype.NamedType('generic-trap', univ.Integer().clone(namedValues=namedval.NamedValues(('coldStart', 0), ('warmStart', 1), ('linkDown', 2), ('linkUp', 3), ('authenticationFailure', 4), ('egpNeighborLoss', 5), ('enterpriseSpecific', 6)))), 71 namedtype.NamedType('specific-trap', univ.Integer()), 72 namedtype.NamedType('time-stamp', rfc1155.TimeTicks()), 73 namedtype.NamedType('variable-bindings', VarBindList()) 74 ) 75 76class Pdus(univ.Choice): 77 componentType = namedtype.NamedTypes( 78 namedtype.NamedType('get-request', GetRequestPDU()), 79 namedtype.NamedType('get-next-request', GetNextRequestPDU()), 80 namedtype.NamedType('get-response', GetResponsePDU()), 81 namedtype.NamedType('set-request', SetRequestPDU()), 82 namedtype.NamedType('trap', TrapPDU()) 83 ) 84 85class Message(univ.Sequence): 86 componentType = namedtype.NamedTypes( 87 namedtype.NamedType('version', Version()), 88 namedtype.NamedType('community', Community()), 89 namedtype.NamedType('data', Pdus()) 90 ) 91