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 编译它