2016-10-03 147 views
0
  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

回答

0

我的猜測是:

  • 這是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