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 保存」はすべてのタブに共通です。
操作
- 宛先 (ホスト、ポート、バージョン、v1 / v2c はコミュニティ、v3 はユーザー・セキュリティレベル・プロトコル・パスフレーズ) を入力します。よく使う宛先は「プロファイルを保存」でブラウザに保存できます。コミュニティとパスフレーズはプロファイルにもサーバにも保存されません。
- OID 欄にオブジェクト名か OID を入力します。読み込み済み MIB の名前が補完されます (
ifDescr.1、IF-MIB::ifTable、sysUpTime.0、1.3.6.1.2.1.1)。スペース区切りで複数指定できます。「MIB ツリーから選ぶ」を開くと、ツリー (全体、またはモジュールごと) のチェックボックスで OID 欄に追加・削除できます。スカラーには.0が付きます。 - 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 の合計です。
- Get: 指定したインスタンスの値。スカラーは
結果欄には要求した OID を表示します。
結果は「名前・型・値」の表で表示します。値は MIB を使って整形します。
| 元の値 | 表示 |
|---|---|
ifOperStatus の 1 | up(1) |
MacAddress (1x:) | 00:1b:21:aa:bb:cc |
| DateAndTime | 2026-10-27,13:5:9.4,+9:0 |
| TimeTicks 12345678 | 1d 10:17:36.78 (12345678) |
hrMemorySize 8048 | 8048 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 の厳密な検証器ではありません。