Python 2.7 将pysnmp与privProtocol=usm3DESEDEPrivProtocol选项一起使用时出错
我想从配置了auth协议MD5和priv协议3DES的snmp设备获取信息 配置语句是 snmp服务器用户testuser testgroup v3 auth md5 authmd5pwd priv 3des privpwdes 用于访问设备的pysnmp代码为Python 2.7 将pysnmp与privProtocol=usm3DESEDEPrivProtocol选项一起使用时出错,python-2.7,snmp,pysnmp,Python 2.7,Snmp,Pysnmp,我想从配置了auth协议MD5和priv协议3DES的snmp设备获取信息 配置语句是 snmp服务器用户testuser testgroup v3 auth md5 authmd5pwd priv 3des privpwdes 用于访问设备的pysnmp代码为 from pysnmp.hlapi import * def get(mib): errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(Sn
from pysnmp.hlapi import *
def get(mib):
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
UsmUserData('nmsuser', 'authmd5pwd', 'privpwddes',
authProtocol=usmHMACMD5AuthProtocol,
privProtocol=usm3DESEDEPrivProtocol),
UdpTransportTarget(('10.96.158.251', 161)),
ContextData(),
ObjectType(ObjectIdentity(mib)))
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print(varBind[1])
if __name__ == "__main__":
get('.1.3.6.1.2.1.1.5.0')
当我执行这个时,我得到
Traceback (most recent call last):
File "pytest.py", line 24, in
get('.1.3.6.1.2.1.1.5.0')
File "pytest.py", line 11, in get
ObjectType(ObjectIdentity(mib)))
File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 113, in getCmd
File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dispatch.py", line 50, in runDispatcher
pysnmp.error.PySnmpError: poll error: Traceback (most recent call last):
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dispatch.py", line 46, in runDispatcher
use_poll=True, map=self.__sockMap, count=1)
; File "/usr/lib/python2.7/asyncore.py", line 220, in loop
poll_fun(timeout, map)
; File "/usr/lib/python2.7/asyncore.py", line 201, in poll2
readwrite(obj, flags)
; File "/usr/lib/python2.7/asyncore.py", line 123, in readwrite
obj.handle_error()
; File "/usr/lib/python2.7/asyncore.py", line 108, in readwrite
obj.handle_read_event()
; File "/usr/lib/python2.7/asyncore.py", line 449, in handle_read_event
self.handle_read()
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dgram/base.py", line 163, in handle_read
self._cbFun(self, transportAddress, incomingMessage)
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/base.py", line 70, in _cbFun
self, transportDomain, transportAddress, incomingMessage
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/entity/engine.py", line 152, in __receiveMessageCbFun
self, transportDomain, transportAddress, wholeMsg
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py", line 344, in receiveMessage
statusInformation
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py", line 533, in __expireRequest
cachedParams['cbCtx'])
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/entity/rfc3413/cmdgen.py", line 104, in processResponsePdu
(origSendRequestHandle, cbFun, cbCtx))
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py", line 153, in sendPdu
pduVersion, PDU, expectResponse, sendPduHandle
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/mpmod/rfc3412.py", line 240, in prepareOutgoingMessage
securityEngineId, securityName, securityLevel, scopedPDU
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/rfc3414/service.py", line 525, in generateRequestMsg
None)
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/rfc3414/service.py", line 395, in __generateRequestOrResponseMsg
(snmpEngineBoots, snmpEngineTime, None), dataToEncrypt
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/eso/priv/des3.py", line 117, in encryptData
encryptKey, snmpEngineBoots
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/eso/priv/des3.py", line 77, in __getEncryptionKey
preIV = privKey[24:32]
; File "/usr/local/lib/python2.7/dist-packages/pyasn1/type/univ.py", line 996, in __getitem__
return self.clone(self._value[i])
; File "/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc1902.py", line 202, in clone
return univ.OctetString.clone(self, *args, **kwargs).setFixedLength(self.getFixedLength())
; File "/usr/local/lib/python2.7/dist-packages/pyasn1/type/base.py", line 349, in clone
return self.__class__(value, **initilaizers)
; File "/usr/local/lib/python2.7/dist-packages/pyasn1/type/univ.py", line 819, in __init__
base.AbstractSimpleAsn1Item.__init__(self, value, **kwargs)
; File "/usr/local/lib/python2.7/dist-packages/pyasn1/type/base.py", line 246, in __init__
raise exType('%s at %s' % (exValue, self.__class__.__name__))
;ValueConstraintError: , > failed at: ValueConstraintError(" failed at: ValueConstraintError('',)",) at OctetString
回溯(最近一次呼叫最后一次):
文件“pytest.py”,第24行,在
获取(“.1.3.6.1.2.1.1.5.0”)
get中第11行的文件“pytest.py”
ObjectType(ObjectIdentity(mib)))
getCmd中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/hlapi/asyncore/sync/cmdgen.py”,第113行
文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dispatch.py”,第50行,在runDispatcher中
pysnmp.error.PySnmpError:轮询错误:回溯(最近一次调用):
; runDispatcher中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dispatch.py”,第46行
使用\u poll=True,map=self.\u sockMap,count=1)
; 文件“/usr/lib/python2.7/asyncore.py”,第220行,在循环中
投票乐趣(超时,地图)
; poll2中第201行的文件“/usr/lib/python2.7/asyncore.py”
读写(对象、标志)
; readwrite中的文件“/usr/lib/python2.7/asyncore.py”,第123行
对象句柄_错误()
; 文件“/usr/lib/python2.7/asyncore.py”,第108行,读写
对象处理读取事件()
; handle\u read\u事件中的文件“/usr/lib/python2.7/asyncore.py”,第449行
self.handle_read()
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/asyncore/dgram/base.py”,第163行,在handle_read中
self.\u cbFun(self、transportAddress、incomingMessage)
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/carrier/base.py”,第70行,在
self、transportDomain、transportAddress、incomingMessage
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/entity/engine.py”,第152行,在uu receiveMessageCbFun中
self、transportDomain、transportAddress、wholeMsg
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py”,第344行,在receiveMessage中
状态信息
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py”,第533行,在
cachedParams['cbCtx'])
; processResponsePdu中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/entity/rfc3413/cmdgen.py”,第104行
(origSendRequestHandle、cbFun、cbCtx))
; sendPdu中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc3412.py”,第153行
PDU版本,PDU,预期响应,发送PDU处理
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/mpmod/rfc3412.py”,第240行,在prepareOutgoingMessage中
securityEngineId、securityName、securityLevel、scopedPDU
; GenerateRequestSG中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/rfc3414/service.py”,第525行
(无)
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/rfc3414/service.py”,第395行,位于uu generateRequestOrResponseMsg中
(snmpEngineBoots,snmpEngineTime,None),数据加密
; encryptData中的文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/eso/priv/des3.py”,第117行
加密密钥,snmpEngineBoots
; 文件“/usr/local/lib/python2.7/dist-packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/secmod/eso/priv/des3.py”,第77行,在
preIV=私钥[24:32]
; 文件“/usr/local/lib/python2.7/dist packages/pyasn1/type/univ.py”,第996行,在__
返回self.clone(self.\u值[i])
; 文件“/usr/local/lib/python2.7/dist packages/pysnmp-4.4.3-py2.7.egg/pysnmp/proto/rfc1902.py”,第202行,克隆中
返回univ.OctetString.clone(self,*args,**kwargs).setFixedLength(self.getFixedLength())
; 文件“/usr/local/lib/python2.7/dist packages/pyasn1/type/base.py”,第349行,在clone中
返回self.\uuuu类(值,**初始化器)
; 文件“/usr/local/lib/python2.7/dist packages/pyasn1/type/univ.py”,第819行,在__
base.AbstractSimpleAsn1Item.\uuuuu init\uuuuuu(self,value,**kwargs)
; 文件“/usr/local/lib/python2.7/dist-packages/pyasn1/type/base.py”,第246行,在__
提升exType(“%s”位于“%s%”(exValue,self.\uuuuuuuu类\uuuuuuuu名称)
;ValueConstraintError:,>在以下位置失败:ValueConstraintError(“在以下位置失败:ValueConstraintError(“”,),)在OctetString
当将3DE与短哈希HMAC(如MD5)一起使用时,似乎是pysnmp 4.4.3中的一个错误 您可以使用其他一些生成至少32个八位字节长散列的AUTH算法,也可以从其中提取固定pysnmp(4.4.4)
一旦您更改用户名/密码,您的脚本似乎可以使用。非常感谢。随着修复工作的顺利进行。pysnmp(4.4.4)将于何时发布?