PySNMP - 已编译MIB的默认位置

时间:2016-10-03 21:09:25

标签: pysnmp

  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,一切正常。

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

    /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')))
      )
      
    3. 无论哪种方式,我都会收到错误消息,指出无法找到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文件的位置。

      并且我不想在每次获取/设置调用中使用addMibSource()addMibCompiler()仅适用于/ usr / share / snmp / mibs,而不适用于用户目录。

      想知道我在这里失踪了什么。感谢帮助。

1 个答案:

答案 0 :(得分:0)

我的猜测是:

  • 找不到ASN.1 MIB,而不是它的编译对应VLAN-MIB.py
  • 不能找到ASN.1 VLAN-MIB,而是VLAN-MIB依赖的其他一些ASN.1 MIB

pysnmp错误到底是什么意思?

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

尽管名称为.addMibCompiler / .addAsn1MibSource,但添加路径但设置给定{{1}的新路径实例。因此,您应始终指定您的应用程序可能需要的所有MIB源,以及您引用的MIB所导入的MIB(并且递归地执行)。

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

说过我打算尝试:

.addAsn1MibSource

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

或者,如果您只想坚持ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addAsn1MibSource('/home/krish/mibs', '/usr/share/snmp/mibs'))) ,请尝试将所有必需的MIB复制到该目录中。从pysnmp导入错误报告缺少依赖项。

最后,有大量各种MIB在线,你可以配置pysnmp自动下载和使用:

/home/krish/mibs