Python 3.4 PYSNMP Set 问题及解决方法

在使用 Python 3.4 版本的 PYSNMP 库时,用户在尝试使用 setCmd() 方法设置 ifAlias 值时遇到了问题。
在这里插入图片描述

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'

2. 解决方案

解决此问题的关键在于加载相应的 MIB 文件,以便 PYSNMP 能够正确解析和设置 ifAlias 值。有两种方法可以加载 MIB 文件。

方法 1:显式加载 MIB 文件

from pysnmp.smi.rfc1902 import ObjectIdentity

mib_name = 'IF-MIB'
mib_module = ObjectIdentity(mib_name)
mib_path = '/path/to/IF-MIB.py'
mib_module.loadMibs(mib_path)

方法 2:使用 MIB::object.index 语法

ifAlias_oid = 'IF-MIB::ifAlias.1'
var_bind = (ifAlias_oid, 'New Alias Value')

修改后的代码如下:

def SNMP_SET_IFALIAS(ifAlias):
    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
        cmdgen.CommunityData('private'),
        cmdgen.UdpTransportTarget(('10.101.0.221', 161)),
        (cmdgen.MibVariable('IF-MIB::ifAlias.1'), ifAlias),
        lookupValues=False,
        lookupNames=False
    )

现在,您可以顺利地使用 PYSNMP 库设置 ifAlias 值了。

其他问题

  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)

解决方法:

手动安装 pyasn1 库,可以使用以下命令:

pip install pyasn1==0.1.8
  1. 关于 lookupValueslookupNames 参数的理解

lookupValueslookupNames 参数用于指定是否在设置值之前查找 MIB 对象。

  • lookupValues=False:表示不查找 MIB 对象,直接使用提供的字符串值。
  • lookupNames=False:表示不查找 MIB 对象的名称,直接使用提供的 OID。

在某些情况下,可能需要同时设置 lookupValueslookupNamesFalse,以便直接访问 OID 而无需加载 MIB 文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值