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 }

実際のデータ型LongDisplayStringF5-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

つまり、目に見える唯一の変更は引用符だけですが、舞台裏では多くのことが起こっていることがわかります。

関連情報