首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pysnmp.smi.error.SmiError:使用pysnmp供电时没有符号错误

pysnmp.smi.error.SmiError:使用pysnmp供电时没有符号错误
EN

Stack Overflow用户
提问于 2017-10-26 20:15:50
回答 1查看 740关注 0票数 0

我正在尝试使用pysnmp模块在apc插座上供电。

这是手动命令,运行良好:

代码语言:javascript
复制
# snmpset -v1 -c comstring 10.x.x.x SNMPv2-SMI::enterprises.318.1.1.26.9.2.4.1.5.27 i 1
PowerNet-MIB::rPDU2OutletSwitchedControlCommand.27 = INTEGER: immediateOn(1)

以下是代码:

代码语言:javascript
复制
from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
    cmdgen.CommunityData('comstring'),
    cmdgen.UdpTransportTarget(('10.x.x.x', 161)),
    (cmdgen.MibVariable('SNMPv2-SMI', 'enterprises.318.1.1.26.9.2.4.1.5', "27"), 1)
)

# Check for errors and print out results
if errorIndication:
    print(errorIndication)
else:
    if errorStatus:
        print('%s at %s' % (
            errorStatus.prettyPrint(),
            errorIndex and varBinds[int(errorIndex)-1] or '?'
            )
        )
    else:
        for name, val in varBinds:
            print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

我已将mibs文件复制到以下路径:

代码语言:javascript
复制
/usr/lib/python2.7/site-packages/pysnmp/smi/mibs
/usr/lib/python2.7/site-packages/pysnmp/smi/mibs/instances

当我试图运行脚本时,我在下面看到了错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "snmp3.py", line 128, in <module>
    (cmdgen.MibVariable('SNMPv2-SMI', 'enterprises.318.1.1.26.9.2.4.1.5', "27"), 1)
  File "/usr/lib/python2.7/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 200, in setCmd
    **kwargs):
  File "/usr/lib/python2.7/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 217, in setCmd
    lookupMib=options.get('lookupMib', True)))
  File "/usr/lib/python2.7/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 239, in setCmd
    contextData.contextName, vbProcessor.makeVarBinds(snmpEngine, varBinds),
  File "/usr/lib/python2.7/site-packages/pysnmp/hlapi/varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController))
  File "/usr/lib/python2.7/site-packages/pysnmp/smi/rfc1902.py", line 845, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "/usr/lib/python2.7/site-packages/pysnmp/smi/rfc1902.py", line 481, in resolveWithMib
    self.__modName, self.__symName
  File "/usr/lib/python2.7/site-packages/pysnmp/smi/builder.py", line 407, in importSymbols
    'No symbol %s::%s at %s' % (modName, symName, self)
pysnmp.smi.error.SmiError: No symbol SNMPv2-SMI::enterprises.318.1.1.26.9.2.4.1.5 at <pysnmp.smi.builder.MibBuilder object at 0x367f550>

有谁能告诉我如果我在这里遗漏了什么吗?如何解决此错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 09:37:44

我想一个问题是MibVariable初始化参数错误。除此之外,在SNMPv2-SMI MIB中没有定义要引用的MIB对象。

MibVariable (AKA ObjectIdentity)类型期望MIB-nameobject-nameindices。使用您的代码,您可以传递object-name + indices作为object-name粘合在一起。这就是为什么它无法解析MIB对象的原因。

这个怎么样:

代码语言:javascript
复制
from pysnmp.hlapi import *
from pysnmp import debug

debug.setLogger(debug.Debug('msgproc'))

snmpEngine = SnmpEngine()

(errorIndication,
 errorStatus,
 errorIndex,
 varBinds) = next(
    setCmd(
      snmpEngine,
      CommunityData('public'),
      UdpTransportTarget(('demo.snmplabs.com', 161)),
      ContextData(),
      ObjectType(ObjectIdentity('SNMPv2-SMI', 'enterprises', '318.1.1.26.9.2.4.1.5.27'), Integer32(1))
    )
)

或者更好的方法是实际使用PowerNet-MIB

代码语言:javascript
复制
ObjectType(ObjectIdentity('PowerNet-MIB', 'rPDU2OutletSwitchedControlCommand', 27), 1) 

或者,您只需将裸露的OID和值类型传递给pysnmp:

代码语言:javascript
复制
ObjectType(ObjectIdentity('1.3.6.1.4.1.318.1.1.26.9.2.4.1.5.27'), Integer32(1))

最后,您不应该将MIB复制到pysnmp安装目录中。将推荐信转到您自己的MIB目录中。或者,您可以要求pysnmp从网络自动搜索和下载请求的MIB。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46963051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档