Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

SNMP ツール

Status: draft

wpg には、パケット生成とは別に SNMP マネージャが入っています (Web UI の「SNMP」画面、API は /api/snmp)。機器のカウンタを読みながら負荷をかける、トラップが飛ぶか確かめる、といった検証を wpg だけで行えます。設計は ADR-0010 を参照してください。

  • Get / GetNext / GetBulk / Walk / Set (SNMPv1 / v2c / v3)
  • SNMPv3 USM: noAuthNoPriv / authNoPriv / authPriv、認証 MD5 / SHA-1 / SHA-224 / SHA-256 / SHA-384 / SHA-512、暗号 DES / AES-128 / AES-192 / AES-256。エージェントの Engine ID は自動で検出します
  • トラップ / インフォームの送信と受信
  • MIB のアップロードと、名前・列挙値・表示ヒント・単位を使った読める表示
  • やり取りした SNMP データグラムの pcap / pcapng 保存

画面

画面は 3 つのタブに分かれます。ヘッダの「pcap 保存」はすべてのタブに共通です。

操作

  1. 宛先 (ホスト、ポート、バージョン、v1 / v2c はコミュニティ、v3 はユーザー・セキュリティレベル・プロトコル・パスフレーズ) を入力します。よく使う宛先は「プロファイルを保存」でブラウザに保存できます。コミュニティとパスフレーズはプロファイルにもサーバにも保存されません。
  2. OID 欄にオブジェクト名か OID を入力します。読み込み済み MIB の名前が補完されます (ifDescr.1、IF-MIB::ifTable、sysUpTime.0、1.3.6.1.2.1.1)。スペース区切りで複数指定できます。「MIB ツリーから選ぶ」を開くと、ツリー (全体、またはモジュールごと) のチェックボックスで OID 欄に追加・削除できます。スカラーには .0 が付きます。
  3. Get / GetNext / GetBulk / Walk を押します。ボタンの下に各操作の説明があります。
    • Get: 指定したインスタンスの値。スカラーは sysDescr.0、表の列は ifDescr.1 のように INDEX まで指定します。sysDescr や ifTable のままだと noSuchObject が返ります (結果欄にその旨を表示します)。
    • GetNext: 各 OID の次のインスタンス 1 件。
    • GetBulk (v2c / v3): 各 OID の後ろを「最大繰り返し数」件ずつ 1 リクエストで返します。サブツリーの終わりでは止まらないので、指定した OID の外の値も含まれます。
    • Walk: 各 OID のサブツリーをすべて、指定した順に辿ります。v2c / v3 では GetBulk、v1 では GetNext で進み、サブツリーの終わり・endOfMibView・増えない OID で止まります。sysDescr.0 のようなインスタンスを指定すると Get の結果になります。「Walk 上限」はすべての OID の合計です。

結果欄には要求した OID を表示します。

結果は「名前・型・値」の表で表示します。値は MIB を使って整形します。

元の値表示
ifOperStatus の 1up(1)
MacAddress (1x:)00:1b:21:aa:bb:cc
DateAndTime2026-10-27,13:5:9.4,+9:0
TimeTicks 123456781d 10:17:36.78 (12345678)
hrMemorySize 80488048 KBytes (UNITS)
OID 値IF-MIB::ifIndex

「生の値」にチェックを入れると MIB を使わない値を表示します。Walk の結果に概念表 (ifTable など) が含まれていれば、INDEX をキーにした行 × 列の表で表示します (「表形式」で切り替え)。表に入らない値 (interfaces を Walk したときの ifNumber.0 など) は表の上に一覧で表示します。

「自動更新」を選ぶと、最後の読み取り操作をその間隔で繰り返します。Counter32 / Counter64 は前回との差から毎秒のレートを計算し、スパークラインで推移を表示します (Counter32 の折り返しも考慮します)。

Set は「Set」欄に OID・型・値を並べます。型 auto は MIB から型を決め、down のような列挙ラベルも受け付けます。MIB にないオブジェクトは型 (net-snmp と同じ i u c C t a o s x d n) を選んでください。エージェントのエラー (notWritable、wrongType など) は結果欄に表示します。

トラップ

  • 受信: 待ち受けアドレス (既定 0.0.0.0:162)、受け付けるコミュニティ (空ならすべて)、v3 ユーザーを指定して「開始」します。受信した通知は一覧にすぐ表示され (WebSocket の snmp_trap イベント)、トラップ OID と各バインディングを MIB の名前で表示します。インフォームには自動で応答します。コミュニティ違いや認証失敗のメッセージも、エラー付きで一覧に出ます。
  • 送信: 操作タブの宛先設定で、トラップ OID (linkDown など) とバインディング (1 行に「オブジェクト 値」か「オブジェクト 型 値」) を送ります。v1 では RFC 3584 に従って Trap-PDU に変換します。「インフォーム」にすると応答を待ちます。v3 トラップでは wpg 側が権威エンジンになります。

MIB

MIB ファイル (.mib .txt .my) をドラッグ & ドロップするか「ファイルを選択」でアップロードします。ファイルは <data_dir>/mibs (設定 snmp.mib_dir) に保存され、すぐに読み込まれます。モジュール一覧には読み込み状態を表示します。

  • 読み込み済み: 問題なし
  • 問題ありで読み込み: 一部の定義が解決できない、IMPORTS 先のモジュールがない、など。足りないモジュール名を表示するので、それもアップロードしてください (ベンダ MIB は CISCO-SMI のような共通モジュールに依存することが多いです)
  • 使用不可: 何も解決できない

ベンダ MIB によくある崩れ (コメント行、知らないマクロ、IMPORTS 漏れ、壊れた定義) は警告として記録し、残りは使えるようにします。アップロードしたモジュールは削除できます (同じファイルに含まれるモジュールごと削除)。同梱モジュールは削除できませんが、同名の新しい版をアップロードすると置き換わります。

MIB ツリーではノードを展開して、説明・構文・アクセス・列挙値・INDEX などを確認できます。「表示するモジュール」でアップロードした MIB (または同梱 MIB) を 1 つ選ぶと、そのモジュールで定義されたオブジェクトだけを、モジュールの最上位ノードから表示します (1.3.6.1 から辿る必要はありません)。モジュール一覧の虫眼鏡ボタンでも切り替えられます。「リクエストで使う」で操作タブの OID 欄に入り (スカラーは .0 付き)、Get (スカラーのみ) / GetNext / Walk ボタンでは操作タブに移ってそのまま実行し、結果欄までスクロールします。

同梱 MIB: SNMPv2-SMI / TC / CONF / MIB、RFC1155-SMI、RFC-1212、RFC-1215、RFC1213-MIB、IANAifType-MIB、IF-MIB、INET-ADDRESS-MIB、IP-MIB、HOST-RESOURCES-MIB、SNMP-FRAMEWORK-MIB、SNMP-USER-BASED-SM-MIB、UUID-TC-MIB、IANA-ENTITY-MIB、ENTITY-MIB (RFC から抽出した IETF の MIB モジュール)。

pcap 保存

ヘッダの「pcap 保存」をオンにすると、以降に wpg が送受信するすべての SNMP データグラム (リクエスト、応答、トラップ、インフォーム) を記録します。.pcap / .pcapng でダウンロードでき、Wireshark で SNMP として表示できます。データグラムは通常の UDP ソケットで送受信しているため、Ethernet / IP / UDP ヘッダは実際のアドレスとポートで合成し、MAC アドレスはプレースホルダ (02:00:00:00:00:01 が wpg 側、02:00:00:00:00:02 が相手) です。記録はメモリ上で最大 10 万フレームまで保持します。

設定

[snmp]
enabled = true        # SNMP ツール画面と API
trap_listen = ""      # 例 "0.0.0.0:162"。空なら起動時は受信しない (画面から開始できる)
mib_dir = ""          # 既定 <data_dir>/mibs

trap_listen を設定すると、起動時にトラップ受信を開始します (起動時の受信器はコミュニティ制限なし・v3 ユーザーなし。必要なら画面から開始し直してください)。

UDP 162 の権限

1024 未満のポートで待ち受けるには root か CAP_NET_BIND_SERVICE が必要です。

sudo setcap cap_net_bind_service=+ep "$(command -v wpg)"

権限がない場合は 0.0.0.0:1162 などで待ち受け、機器のトラップ送信先ポートをそこに向けてください。権限不足で開始できないときは、その旨のエラーを表示します。

制限

  • 受信器は SNMPv3 の時刻窓 (notInTimeWindow) を検査しません。遅れたメッセージも表示するためです。noAuthNoPriv の v3 メッセージは任意のユーザー名で受け付けます。
  • v3 のパスフレーズは 8 文字以上が必要です (RFC 3414 の推奨と多くの機器の制限)。
  • MIB パーサは名前と型を引くためのもので、SMI の厳密な検証器ではありません。