為什麼定義 MIBS 環境變數時 snmpget 輸出不同?

為什麼定義 MIBS 環境變數時 snmpget 輸出不同?
$ export MIBS=
$ snmpget -Oqv -v 2c -c public 10.xxx.yyy.zzz .1.3.6.1.4.1.3375.2.1.14.3.2.0
"ACTIVE"

$ export MIBS=F5-BIGIP-SYSTEM-MIB
$ snmpget -Oqv -v 2c -c public 10.xxx.yyy.zzz .1.3.6.1.4.1.3375.2.1.14.3.2.0
ACTIVE

當 MIBS 環境變數具有值時,為什麼輸出會有差異?

答案1

SNMP mib 定義了 SNMP OID 的資料類型,因此載入 MIB 後,它可以顯示該值的「格式化」版本,而不是顯示原始值。

例如,比較:

MIBS= snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.3.1
iso.3.6.1.2.1.2.2.1.3.1 = INTEGER: 24

和:

$ snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.3.1
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)

當載入 mib 時,snmpget知道如何解釋該值。


在您問題的特定情況下,mibs 表示「將該值顯示為字串」。

答案2

更具體。

如果沒有MIB文檔,SNMP工具只能告訴協定本身定義的非常基本的資料類型,

  • 整數
  • 八位元組字串
  • 無效的
  • 物件標識符
  • IP位址
  • 櫃檯32
  • 規格32
  • 時間滴答聲
  • 不透明
  • 網路位址
  • 櫃檯64

由於資料以 ASN.1 BER 進行編碼,因此解碼演算法可以透過線路從原始位元組中提取此類資料類型。

因此,當您在沒有 MIB 文件的情況下執行 NET-SNMP 的snmpget命令時,它僅將資料解碼為 OCTET STRING 並列印為"ACTIVE".

然而,SMI v1 或 v2 中的 MIB 文件允許透過所謂的「文字約定」在此類基本類型上定義自訂資料類型。在您的情況下,MIB 文件F5-BIGIP-SYSTEM-MIB定義物件.1.3.6.1.4.1.3375.2.1.14.3.2如下,

sysCmFailoverStatusStatus OBJECT-TYPE 
    SYNTAX LongDisplayString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "The failover status on the system."
    ::= { sysCmFailoverStatus 2 }

實際的資料型別LongDisplayString定義在F5-BIGIP-COMMON-MIB

LongDisplayString ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "1024a"
    STATUS       current
    DESCRIPTION  "A longer version of SNMPv2-TC::DisplayString."
    SYNTAX       OCTET STRING (SIZE (0..1024))

因此,當您要求 NET-SNMPsnmpget命令載入 MIB 文件時,它完全了解 的資料類型LongDisplayString並列印ACTIVE

所以,你會看到,唯一可觀察到的變化只是引號,幕後發生了很多事情。

相關內容