0
PDU pdu = new PDU();
pdu.setType(PDU.SET);

pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.1.1"), new Counter64(System.currentTimeMillis())));
pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.2.1"), new OctetString("some string")));

TransportMapping transport = null;
Snmp snmp = null;

try {
    transport = new DefaultUdpTransportMapping();
    transport.listen();

    snmp = new Snmp(transport);
    snmp.send(pdu, getCommunityTarget());
} catch (Exception e) {
    // error occurred
}

これは、snmp トラップを送信してアラームを発生させる方法です。snmp エージェントで変数を設定し、MIB ブラウザで参照しています。pduタイプをPDU.TRAPに設定するとどうなるか知りたいです。ポート 161 ではなくポート 162 で動作し、MIB ブラウザでは表示されませんが、Trap Receiver では表示されません。違いはなんですか?PDU.TRAP を使用する目的は何ですか? エージェントはどうすればそれをキャッチできますか? アラームを発生させてクリアするためのベスト プラクティスは何ですか?

4

2 に答える 2

1

SNMP エンティティを実装する場合、単純な「トラップ送信者」の代わりに、いわゆる「トラップ指向ポーリング」の概念を実装する方がよい場合がよくあります。後者の場合は SNMP4J をすぐに使用でき、最初の場合は SNMP4J-Agent を使用できます。これも Apache 2 Open Source ライセンスの下でライセンスされています。

トラップはネットワーク上で失われる可能性があるため、エージェント部分を実装するためにより多くの (少ない) 労力が必要ですが、トラップによるポーリングのアプローチには多くの利点があります。

元の質問について:

  • SET pdu を送信するとき、コマンド レスポンダー (エージェント) にそのエンティティに関するいくつかの情報を変更するように依頼します。
  • TRAP またはより良い NOTIFICATION pdu を送信する場合、コマンド ジェネレータ (マネージャ) にイベントについて通知する必要があります。トラップ指向ポーリングの概念を導入すると、コマンド ジェネレーターは *LastChanged オブジェクトに対して定期的に (たとえば 5 分ごとに) GET 要求を送信して、コマンド レスポンダーの MIB の特定の (重要な) サブツリーのデータ変更を効率的に検出します。変更が検出された場合 (通知 PDU またはポーリングのいずれかを介して)、変更されたデータがコマンド ジェネレーターによってコマンド レスポンダーから要求されます。
于 2014-02-02T10:15:00.093 に答える