SNMP トラップの形式を理解しようとしています。SNMPトラップを送信するコードをWindowsからLinuxに移植しています。Windows コードは組み込みのライブラリ (一部の関数には SnmpStartup、SnmpSetRetransmitMode が含まれます。WinSNMP と呼ばれる場合があります) を使用するため、Linux に移植するときにそのコードを保持する方法はありません。
SNMP トラップを簡単に送信できる SNMP++ という優れたライブラリを見つけました。
私の理解では、SNMP トラップの最初の 2 つの変数バインディング (vb) フィールドは、特定の形式を満たす必要があります。最初の vb は sysuptime (基本的には、トラップのタイムスタンプ) であり、既知の OID 1.3.6.1.2.1.1.3.0
.
2 番目の vb はトラップの ID です。それに関するドキュメントはどこにも見つかりませんが、SNMP++ はトラップの ID に OID を与えます1.3.6.1.6.3.1.1.4.1.0
(その値は、送信しているトラップの OID です)。pdu.set_notify_id 関数を使用して設定されます。
これは、トラップを送信するときに存在しなければならない別の既知の OID ですか? Windows ライブラリは、この OID をまったく使用しません。ID フィールドの OID を送信する OID に設定するため、OID とその値は同じものに設定されます。ただし、手動で行われているように見えるため、元のコーダーは形式を十分に理解していない可能性があります。
では、どちらが正しいでしょうか?
windows:
1.3.6.1.4.1.XXXX.2.1.51 -> 1.3.6.1.4.1.XXXX.2.1.51
SNMP++:
1.3.6.1.6.3.1.1.4.1.0 -> 1.3.6.1.4.1.XXXX.2.1.51
1.3.6.1.6.3.1.1.4.1.0
この値に関するドキュメントが見つからないのはなぜですか? 私が読んだRFCにはないようです。OIDが結果を提供することをグーグルで検索しますが、その使用法については説明していません。