【问题标题】:PySNMP - default location of the compiled MIBsPySNMP - 已编译 MIB 的默认位置
【发布时间】:2016-10-03 21:09:25
【问题描述】:
  1. 我将编译器配置为查找 asn1 MIB 的位置如下:

    compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs'])
    
  2. 然后使用 getCmd() 作为:

    errorIndication, errorStatus, errorIndex, varBinds = next(
        getCmd(SnmpEngine(),
               CommunityData('private', mpModel=0),
               UdpTransportTarget(('192.168.56.20', '161')),
               ContextData(),
               ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3))))
    
  3. 我在$HOME/.pysnmp/mibs 中找到了 VLAN-MIB.py,一切正常。

但我想将 asn1 MIB 的位置修改为我的本地文件夹。说:

/home/krish/mibs

我尝试了两种不同的方式:

  1. 这个:

    compiler.addMibCompiler(mibBuilder, sources=['/home/krish/mibs'])`
    
  2. 这个:

    errorIndication, errorStatus, errorIndex, varBinds = next(
        getCmd(SnmpEngine(),
               CommunityData('private', mpModel=0),
               UdpTransportTarget(('192.168.56.20', '161')),
               ContextData(),
               ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addAsn1MibSource('/home/krish/mibs')))
    )
    

无论哪种方式,我都会收到错误消息,提示找不到 VLAN-MIB。

但是如果我自己离线编译并将VLAN-MIB.py文件放在指定目录下为:

errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('private', mpModel=0),
           UdpTransportTarget(('192.168.56.20', '161')),
           ContextData(),
           ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addMibSource('/home/krish/mibs')))
)

效果很好。

所以我的问题是,在 PySMI 自动解析 asn1 MIB 之后,编译的 MIB (.py) 放在哪里?在上述情况下,我没有在默认位置$HOME/.pysnmp/mibs 找到它们。

以及如何告诉 pysnmp/pysmi 将自动生成的 .py 文件保存在哪里。

而且我不想在每个 get/set 调用中使用addMibSource()addMibCompiler() 仅适用于 /usr/share/snmp/mibs,不适用于用户目录。

想知道我在这里缺少什么。感谢帮助。

【问题讨论】:

  • 请指定您使用的pysnmp版本?
  • pysnmp 版本 4.3.2

标签: pysnmp


【解决方案1】:

我的猜测是:

  • 是找不到 ASN.1 MIB,而不是它的编译副本VLAN-MIB.py
  • 不是找不到ASN.1 VLAN-MIB,而是VLAN-MIB所依赖的其他ASN.1 MIB

pysnmp 错误到底说明了什么?

由于您使用 ASN.1 MIB,例如不是pysmi预编译的,你应该使用.addMibCompiler.addAsn1MibSource来设置搜索路径。

尽管有它的名称,.addMibCompiler/.addAsn1MibSource 并不添加路径,而是设置给定MibBuilder 实例的新路径。因此,您应该始终为您引用的 MIB 和您引用的 MIB 导入的 MIB 指定您的应用程序可能需要的所有 MIB 源(并且递归地进行)。

您可以将destination 关键字参数传递给.addMibCompiler/.addAsn1MibSource 函数以更改已编译的MIB 位置。

话虽如此,我建议尝试:

addMibCompiler(mibBuilder, sources=['/home/krish/mibs', '/usr/share/snmp/mibs'])

ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addAsn1MibSource('/home/krish/mibs', '/usr/share/snmp/mibs')))

或者,如果您只想坚持使用/home/krish/mibs,请尝试将所有必需的 MIB 复制到该目录中。从 pysnmp 导入错误报告缺少依赖项。

最后,网上有大量的各种 MIB,您可以将 pysnmp 配置为自动下载和使用:

addMibCompiler(mibBuilder, sources=['http://mibs.snmplabs.com/asn1/@mib@'], destination='/home/krish/mibs')

【讨论】:

  • 您猜对“VLAN-MIB 所依赖的其他一些 ASN.1 MIB”是正确的。非常感谢。欣赏它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多