如何理解 SNMP MIB?
據我了解,網路管理站使用 SNMP 管理資訊庫數據庫將來自 SNMP 代理的數據轉換為可理解的形式。例如在sysUpTimeInstance的情況下:
$ snmpwalk -v 2c -c public 10.10.10.1 sysUpTimeInstance DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (28267576) 3 days, 6:31:15.76 $
..我想這要歸功於 MIB 將 28267576 轉換為 3 天 6 小時 31 分鐘 15.76 秒?現在我搜尋了正確的 MIB 文件以查看此翻譯:
$ grep -ir sysUpTimeInstance /usr/local/share/smi/mibs/ /usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB:sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 } /usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB: DEFVAL { sysUpTimeInstance } /usr/local/share/smi/mibs/ietf/DISMAN-EXPRESSION-MIB:sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 } /usr/local/share/smi/mibs/ietf/DISMAN-EXPRESSION-MIB: DEFVAL { sysUpTimeInstance } $
..看起來它是在
/usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB
文件中定義的。我應該如何理解這一點sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
?
手動將其連結回可能非常乏味。有一些工具可以為
snmptranslate
你做這種事情。試試snmptranslate -M /path/to/mibs -m ALL -Pu -Tso|grep -B1 sysUpTimeInstance
。要查看 sysUpTime 的完整詳細資訊,請使用snmptranslate -Td -OS .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime
This will show you that it is measure in TimeTicks.但要回答您的問題,MIB 文件是用 ASN.1 編寫的,其中每個對像都可以建構在所有以前的對像上。除其他外,如描述和對像類型等,它建構 OID,也就是將 OID 映射到名稱的對象標識符,例如
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance
對於此條目
sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
,大致翻譯為“sysUpTimeInstance 的 OID 等於 sysUpTime 的 OID 加上 ‘.0’,而 MIB 等於 sysUpTime 的 MIB 加上 ‘.sysUpTimeInstance’要查看 sysUpTime 的 OID 和 MIB 的其餘部分是什麼,您必須先查看文件中的內容。請記住,它可能是從另一個文件導入的。在這種情況下,確實如此,因此如果您查看 IMPORTS 部分,您會看到 sysUpTime 是從 SNMPv2-MIB 導入的。如果您隨後檢查該文件,您將看到 sysUpTime 已定義,並且在該定義中您將找到
::= { system 3 }
.到目前為止,我們已經有了
.3.0
andsystem.sysUpTime.sysUpTimeInstance
,它只是 OID 和完整 MIB 名稱的最後一部分。然後我們可以system
追溯到它的定義等等。通過沿著這個鏈返回文件,您最終將獲得整個 OID 和完整的 MIB。當然,您可以使用
snmptranslate
,如第一段所示,為您完成所有這些工作。它將顯示 MIB 和 OID。對於我們大多數人來說,這通常是我們需要去的地方。有關更多資訊,請參閱:
(產品小冊子,還包含一個很好的 MIB 總結) https://scadahacker.com/library/Documents/ICS_Protocols/Demystifying%20the%20SNMP%20MIB.pdf