Python 3.4 PYSNMP设置问题
Python 3.4 PYSNMP Set issues
Python 3.4 - 最新版本的 PYSNMP ( pip --update )
使用 PYSNMP 库设置 ifAlias 值时出现问题。希望有人能够阐明为什么我在第二个函数中出错。
已验证此 OID 可使用标准 MIB 浏览器 ( iReasoning ) 设置
这个很好用。你只需要在函数中放一个字符串 new sys contact value
就可以了。
def SNMP_SET_SYSCONTACT(syscontact):
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('.1.3.6.1.2.1.1.4.0'), syscontact),
lookupNames=False,
lookupValues=True)
这个根本不行。
def SNMP_SET_IFALIAS(ifAlias):
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),
lookupValues=False,
lookupNames=False)
我返回的错误是:
Traceback (most recent call last):
File "<pyshell#632>", line 1, in <module>
SNMP_SET_IFALIAS('Check this out')
File "<pyshell#629>", line 2, in SNMP_SET_IFALIAS
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(cmdgen.CommunityData('private'),cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),lookupValues=False, lookupNames=False)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 452, in setCmd
kwargs.get('contextName', null)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 314, in setCmd
self.makeVarBinds(varBinds),
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 212, in makeVarBinds
varVal = varName.getMibNode().getSyntax().clone(varVal)
AttributeError: 'MibIdentifier' object has no attribute ‘getSyntax'
如果需要,我很乐意提供更多信息。
另外两个问题
1) 我试图获取最新的 pysnmp 4.2.6.2 但我在安装时遇到以下错误
Could not find a version that satisfies the requirement pyasn1>=0.1.8
(from pysnmp) (from versions: 0.0.9a0, 0.0.10a0, 0.0.11a0, 0.0.12a0,
0.0.13a0, 0.0.13b0, 0.0.13, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7) No matching distribution found for pyasn1>=0.1.8 (from pysnmp)
2) 我是不是误解了上面的 lookupValues=False & lookupNames=False kwargs?我认为这应该允许我直接访问 OID 而无需导入 MIB。如果可能的话,我想避免任何依赖。
这看起来像是 pysnmp 中的一个错误——最新的 CVS 版本可能不会这样。
但是,该错误的根本原因是 pysnmp 找不到对应于 1.3.6.1.2.1.31.1.1.1.18.1 OID 的 MIB 对象。这可能是因为未加载定义 OID 的 MIB,或者所讨论的 OID 不对应于任何 MIB 对象。
要加载 IF-MIB,您可以显式执行:
cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1').loadMibs('IF-MIB')
或使用MIB::object.index语法:
cmdgen.MibVariable('IF-MIB', 'ifAlias', 1)
您可以从 pypi 上可用的 pysnmp-mibs 包中获取 IF-MIB.py 或通过[实验] pysmi 编译器 (http://sf.net/projects/pysmi/)
从 ASN.1 MIB 编译它
Python 3.4 - 最新版本的 PYSNMP ( pip --update )
使用 PYSNMP 库设置 ifAlias 值时出现问题。希望有人能够阐明为什么我在第二个函数中出错。
已验证此 OID 可使用标准 MIB 浏览器 ( iReasoning ) 设置
这个很好用。你只需要在函数中放一个字符串 new sys contact value
就可以了。
def SNMP_SET_SYSCONTACT(syscontact):
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('.1.3.6.1.2.1.1.4.0'), syscontact),
lookupNames=False,
lookupValues=True)
这个根本不行。
def SNMP_SET_IFALIAS(ifAlias):
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),
lookupValues=False,
lookupNames=False)
我返回的错误是:
Traceback (most recent call last):
File "<pyshell#632>", line 1, in <module>
SNMP_SET_IFALIAS('Check this out')
File "<pyshell#629>", line 2, in SNMP_SET_IFALIAS
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(cmdgen.CommunityData('private'),cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),lookupValues=False, lookupNames=False)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 452, in setCmd
kwargs.get('contextName', null)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 314, in setCmd
self.makeVarBinds(varBinds),
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 212, in makeVarBinds
varVal = varName.getMibNode().getSyntax().clone(varVal)
AttributeError: 'MibIdentifier' object has no attribute ‘getSyntax'
如果需要,我很乐意提供更多信息。
另外两个问题
1) 我试图获取最新的 pysnmp 4.2.6.2 但我在安装时遇到以下错误
Could not find a version that satisfies the requirement pyasn1>=0.1.8
(from pysnmp) (from versions: 0.0.9a0, 0.0.10a0, 0.0.11a0, 0.0.12a0,
0.0.13a0, 0.0.13b0, 0.0.13, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7) No matching distribution found for pyasn1>=0.1.8 (from pysnmp)
2) 我是不是误解了上面的 lookupValues=False & lookupNames=False kwargs?我认为这应该允许我直接访问 OID 而无需导入 MIB。如果可能的话,我想避免任何依赖。
这看起来像是 pysnmp 中的一个错误——最新的 CVS 版本可能不会这样。
但是,该错误的根本原因是 pysnmp 找不到对应于 1.3.6.1.2.1.31.1.1.1.18.1 OID 的 MIB 对象。这可能是因为未加载定义 OID 的 MIB,或者所讨论的 OID 不对应于任何 MIB 对象。
要加载 IF-MIB,您可以显式执行:
cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1').loadMibs('IF-MIB')
或使用MIB::object.index语法:
cmdgen.MibVariable('IF-MIB', 'ifAlias', 1)
您可以从 pypi 上可用的 pysnmp-mibs 包中获取 IF-MIB.py 或通过[实验] pysmi 编译器 (http://sf.net/projects/pysmi/)
从 ASN.1 MIB 编译它