etingof / pysnmp

Python SNMP library
http://snmplabs.com/pysnmp/
BSD 2-Clause "Simplified" License
568 stars 188 forks source link

pysnmp nextCmd method fails for snmp v3 from machine deployed in hyper V but snmpwalk is successful #409

Closed 070bex424pankaj closed 1 year ago

070bex424pankaj commented 2 years ago

When trying to snmpwalk from machines deployed in hyperv to linux machine using snmp v3, snmp walk was successful. But using pysnmp, error is as shown below The code that returns error below is

from pysnmp.hlapi import * from pysnmp import debug g = nextCmd( SnmpEngine(), UsmUserData('roadmin', 'roadmin1234', 'rwadmin1234'), UdpTransportTarget(('x.x.x.x', 161)), ContextData(), ObjectType(ObjectIdentity('1.3.6.1.2.1.31.1.1.1.1')), lexicographicMode=False )

print(next(g)) where x.x.x.x is ip address of destination machine

The error is

Traceback (most recent call last): File "test123.py", line 12, in print(next(g)) File "/usr/lib/python3.6/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 358, in nextCmd lookupMib=options.get('lookupMib', True))) File "/usr/lib/python3.6/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 352, in nextCmd options.get('cbFun'), options.get('cbCtx')) File "/usr/lib/python3.6/site-packages/pysnmp/entity/rfc3413/cmdgen.py", line 276, in sendVarBinds reqPDU, cbFun, cbCtx)) File "/usr/lib/python3.6/site-packages/pysnmp/entity/rfc3413/cmdgen.py", line 189, in sendPdu (sendRequestHandle, cbFun, cbCtx) File "/usr/lib/python3.6/site-packages/pysnmp/proto/rfc3412.py", line 153, in sendPdu pduVersion, PDU, expectResponse, sendPduHandle File "/usr/lib/python3.6/site-packages/pysnmp/proto/mpmod/rfc3412.py", line 240, in prepareOutgoingMessage securityEngineId, securityName, securityLevel, scopedPDU File "/usr/lib/python3.6/site-packages/pysnmp/proto/secmod/rfc3414/service.py", line 525, in generateRequestMsg None) File "/usr/lib/python3.6/site-packages/pysnmp/proto/secmod/rfc3414/service.py", line 497, in generateRequestOrResponseMsg authenticatedWholeMsg = encoder.encode(msg) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 102, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 588, in encodeValue substrate += encodeFun(component, asn1Spec, **options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 86, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 696, in encodeValue return encodeFun(component, asn1Spec, **options), True, True File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 102, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 588, in encodeValue substrate += encodeFun(component, asn1Spec, **options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 86, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 696, in encodeValue return encodeFun(component, asn1Spec, **options), True, True File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 102, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 588, in encodeValue substrate += encodeFun(component, asn1Spec, **options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 832, in call__ substrate = concreteEncoder.encode(value, asn1Spec, self, options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 102, in encode value, asn1Spec, encodeFun, options File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 676, in encodeValue value, asn1Spec, encodeFun, **options) File "/usr/lib/python3.6/site-packages/pyasn1/codec/ber/encoder.py", line 650, in _encodeComponents raise inconsistency TypeError: exceptions must derive from BaseException

lextm commented 1 year ago

The issue you met came from pyasn1, as

https://github.com/pyasn1/pyasn1/blob/v0.4.8/pyasn1/codec/ber/encoder.py#L650

So at this moment you should go to its new repo for guidance, https://github.com/pyasn1/pyasn1/issues