技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

SNMP

SNMPv3のエンジンIDは何に使うのか。

このブログでも何度かSNMPv3のエンジンIDについて書いたが、そもそもエンジンIDが何に使われるのか、ちゃんと調べたことはなかった。 そこで、今回、RFC など調べてみたところ、エンジンID は SNMPv3 通信において、認証や暗号化(復号化)を行う時の鍵として…

SNMPのnoSuchNameとnoSuchObject/noSuchInstanceとの違い

主題の件について、簡単に纏める。 どちらも、SNMPエージェント内に対象のMIBが存在しないことを示すものだが、noSuchName はSNMPのエラー・ステータスであり、noSuchObject/noSuchInstance は varbind に入ってくるもの(MIB値)なので、そもそも種類が違うも…

SNMPのCounterBasedGauge64型について

以前、https://akrad.hatenablog.com/entry/2019/08/21/232701 の記事を書いた後、ネット上で、CounterBasedGauge64 という型があるという情報を見つけた。 「SNMPに Counter64型以外で64bitの範囲の値を表現できる型があるのかな?」と思ったが、さらに調べ…

ifTable と ifXTable

SNMPの標準MIB-2配下には、インタフェースを表すMIBテーブルが2つある。ifTable(.1.3.6.1.2.1.2.2) と ifXTable(.1.3.6.1.2.1.31.1.1) である。 http://www.oidview.com/mibs/0/IF-MIB.html ifXTable は、ifTable の後に拡張版として定義されたものであり、6…

SNMPv1トラップからSNMPv2トラップへの変換

SNMPv1トラップをSNMPv2トラップに変換する方法については、RFC2576に記載がある。 https://www.ietf.org/rfc/rfc2576.txt の「3.1. Translating SNMPv1 Notification Parameters to SNMPv2 Notification Parameters」 上記の中でも snmpTrapOID の扱いはち…

JavaでSNMPトラップ送信

JavaでSNMPトラップを送信するコードを作成した。snmp4j (https://www.snmp4j.org/) を使用しているので、コンパイル&実行には snmp4j-x.x.x.jar が必要。(実機検証は Java1.8 + snmp4j-2.6.2.jar で実施した) 実行方法 java TrapSender [-v {1|2c|2}] [-a …

SNMPのメッセージフォーマット

SNMPのメッセージフォーマットについて、分かりやすく説明しているページを幾つか見つけたので、あとで見返すためにここにメモしておく。 SNMP: Simple? Network Management Protocol SNMPとは | IT用語 | 意味 解説 上の方のページは英文だが、SNMPのメッセ…

SNMP Report PDU が使われる場面

先日、SNMP report - ITエンジニアの技術メモ にて、「SNMP Report はあまり見たことがない」と書いたが、最近、SNMP Report が使われる場面を見つけたのでメモしておく。 https://www.ietf.org/rfc/rfc2574.txt に以下の記載がある。 4. Discovery The User…

SNMP report

SNMP report について、少し調べた時のメモ。 SNMP report は主に SNMPv3 で使用される。SNMPエージェントが、SNMP マネージャからの SNMP リクエストを受け取り、リクエスト処理中に問題が発生した場合などに、SNMP マネージャに SNMP report を返すことが…

SNMPのOIDのルール

rfc2578 によると、SNMPのOIDには以下の規定がある。 サブID(※)は正数 サブIDの個数は128個まで サブIDの最大値は 2^32-1 (4294967295) 少なくても2個のサブIDを持つ 最初のサブIDは 0 or 1 or 2 (※)サブIDとは、OIDを構成する各数値のこと。 An OBJECT IDEN…

OIDのBER形式でのエンコード

以前、以下の記事のコードを書いた時、SNMPのOIDの BER(Basic Encoding Rule)形式でのエンコード処理について勉強した。 akrad.hatenablog.com 今回は、その時に勉強した内容を書く。 SNMPのOIDのエンコードで面倒なのは、OIDの数値が128以上の場合である。…

16進のSNMP OIDを通常の文字列の形式に変換する

主題の処理を行うperlスクリプト convertOidHexToStr.pl を作成した。使い方は、例えば、「perl convertOidHexToStr.pl 2b06010401CE0F」 や 「perl convertOidHexToStr.pl "2b 06 01 04 01 CE 0F"」 のように指定すると、結果として、人に優しい形式でOID文…

SNMP trap (coldStart) 送信スクリプト

以前作成した以下の perl スクリプトをエンハンスした。 akrad.hatenablog.com具体的には、SNMPv1 のcoldStartトラップも SNMPv2cのcoldStartトラップも送信できるようにし、トラップ送信先やSNMPv1トラップの agent-addrフィールドも指定できるようにした。…

SNMPのパケットダンプを解析する時のコツ

先ほど、 SNMP v2c trap (coldStart) 送信スクリプト - Akira's Blog の記事を書くために SNMPトラップのパケットダンプを解析した。この際に SEQUENCE型を示す 0x30 に着目すると、各データの区切り位置が分かって解析しやすかった。 パケットダンプ内に 0x…

SNMP v2c trap (coldStart) 送信スクリプト

SNMP v2c の trap (coldStart) を送信するperlスクリプト sendTrap.pl を作成した。perl sendTrap.pl として実行すると、localhost の 162/udp に対して、coldStartトラップを送信する。例えば、SNMPマネージャのtrap受信テストを簡単に行うのに使用できると…

Cisco機器に対するSNMPリクエスト

Cisco機器に対してSNMPリクエストを行うと、機器のCPU使用率が高騰することがあるようだ。 IP簡易ネットワーク管理プロトコル (SNMP) は高いCPU使用率を引き起こす - Cisco ただ、上述のページに、SNMPリクエストを受けてCPU高騰しても、ネットワーク機器と…

SNMP getbulk の nonRepeaters オプション

以前、以下の記事を書いた時に、 akrad.hatenablog.com SNMPのgetbulkで出てくる nonRepeaters が何なのかあまり分かっていなかったので、今回それを調べてみた。まず、nonRepeaters については、 http://net-snmp.sourceforge.net/wiki/index.php/GETBULK …

JavaでSNMP GetBulk

JavaでSNMP Get Bulk を実行するコードを作ってみた。とりあえずざっと作ってみただけなので、SNMP要求を出すターゲットの情報などはソース中にハードコードしている。 実行すると、localhost上のSNMPエージェントに対して、.1.3.6.1.2.1.1 から数えて20個の…

MIBファイル内の定義における大文字・小文字の使い分け

SNMPで使用されるMIBファイルでは、以下のように大文字・小文字が使い分けられていることが多い。RFCでの定義例はそうなっている。 ・・・ evalEntry OBJECT-TYPE ★オブジェクト定義は先頭が小文字 SYNTAX EvalEntry ★シンタックス定義は先頭が大文字 MAX-AC…

MIB取得の終了について

例えばnet-snmpのsnmpwalkコマンドなど、SNMP GetNextRequestを繰り返してMIBを次々取得するアプリケーションは、どのようにしてエージェント側のMIBの終了を知ることができるのか、についてちょっと調べてみた。 これについては rfc に以下の記載がある。 W…

SNMPのoctet string型のデータの中に制御文字は入り得るのか?

SNMPには文字列を表現する型としてoctet string型がある。この型のデータの中に改行コード等の制御文字は入り得るのかについて調べてみた。 まず、RFCを見てみた。 RFC 2578 - Structure of Management Information Version 2 (SMIv2) The OCTET STRING type…