PySNMP - 编译的MIB

问题描述:

  1. 我配置编译器在哪里寻找ASN1的MIB如下的默认位置:PySNMP - 编译的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'))) 
) 

它工作得很好。

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

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

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

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

+0

请注明您使用的是pysnmp版本? –

+0

pysnmp 4.3.2版本 – krish

我的猜测是:

  • 这是ASN.1 MIB找不到,而不是它的编译对口VLAN-MIB.py
  • 这并不是说ASN.1 VLAN-MIB不能被发现,但其他一些ASN.1 MIB VLAN-MIB是依赖于

究竟是什么pysnmp错误说?

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

尽管它的名字,.addMibCompiler/.addAsn1MibSource添加一个路径,但设置一个新的(S)为给定的MibBuilder实例。因此,您应该始终指定您的应用程序可能需要的所有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/@[email protected]'], destination='/home/krish/mibs') 
+0

你猜对了“一些其他的VLAN-MIB依赖的ASN.1 MIB”。非常感谢。欣赏它。 – krish