1

SNMP4J を使用して、SNMP でデバイスの情報を読み取ります。システム名 (OID iso.3.6.1.2.1.1.5.0) を STRING ではなく Hex-STRING で表すデバイスがいくつか見つかりました。

システム名を表示するには、次のコードを使用します。

Variable var = response.getVariable(new OID(".1.3.6.1.2.1.1.5.0"));
System.out.println(var.toString());

response は PDU オブジェクトです。

システム名が STRING 値として表されている場合、これは予想どおりです。Hex-STRING として表される場合は、Hex 値を出力するだけです。

例:
システムの名前を「SYSTEM NAME」とします。
STRING を使用すると、「SYSTEM NAME」が出力されます。
Hex-STRING を使用すると、「53:59:53:54:45:4d:20:4e:41:4d:45」と出力されます

コマンド ラインで snmpwalk を使用すると、-Oa フラグを使用できます。これにより、すべての Hex-STRING 値が STRING として表示されます。SNMP4J でこのフラグを使用することは可能ですか、または同様のオプションはありますか?

4

1 に答える 1

0

「Hex-STRING」という用語をどこから取得しているのかわかりません。SNMP は、そのようなデータ タイプを定義しません。関連する RFC ドキュメントを読むことをお勧めします。それらは IETF から公開されています。SNMP に関するウィキペディアの記事 ( http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#References ) には優れた参照リストがあり、「STD」とマークされたものを参照することから始めることができます。

SNMP では、すべての文字列は不定長のバイト文字列である OCTET-STRING のサブタイプ (別の言葉では「制限」) です。jpeg画像などを表す、印刷できないものであっても、任意のデータを含めることができます。

データを特定のバイト範囲または長さに制限する、いくつかのテキスト規則が定義されています。DisplayString は、NVT ASCII 文字セットからのバイトのみを含むように定義されているため、ユーザーはそれが印刷可能であると信頼できます。

実際、sysName は、最大長 255 文字の DisplayString として定義されています。

sysName OBJECT-TYPE
              SYNTAX  DisplayString (SIZE (0..255))

優れた SNMP マネージャーは、sysName と DisplayString の両方を定義する RFC1213-MIB を認識しているため、マネージャーは、受信したデータが印刷可能な ASCII 文字であると想定する必要があります。

「Hex-STRINGで表現した場合」とはどういう意味ですか? エージェント上、Java コード内、または net-snmp の「snmpwalk」コマンドを使用する場合に、どこで「表示」されますか?

呼び出しは、変数のvar.toString()内容を端末で安全に出力できるものに変換する必要があるため、SNMP4j が任意のバイナリ文字列を 16 進文字列に変換している可能性があります。

于 2014-03-21T13:46:46.073 に答える