web-dev-qa-db-ja.com

SNMP v1、v2c、およびv3トラップの違い

V1、v2c、v3トラップPDU /フォーマットの違いを説明してください。

10

これには、RFCドキュメントを確認する必要があります。つまり、これはプログラミング関連ではなく、おそらくServerFaultに属しています。

あなたにいくつかのヒントを与えます:

  1. SNMP v1は、他のメッセージ(GETなど)とは異なる特別なTRAPメッセージ形式を定義します。 http://tools.ietf.org/html/rfc1157#page-27 このメッセージ形式はSNMPv2およびv3では使用されなくなりました。 SNMPエージェントがv2またはv3に対してそのようなTRAPメッセージを送信する場合、それはバグである可能性があります。
  2. V2以降、TRAPは一般的なメッセージ形式(GETなどと同じ)の使用を開始します。したがって、SNMPv2-Trap-PDUと呼ばれます。 http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3はすべてのメッセージにセキュリティモデルを導入するため、TRAPもそのような更新を受信します。それはまだSNMPv2-Trap-PDUに基づいています。
7
Lex Li

SNMPv2は、わずかに異なる方法でトラップを定義します。

MIBでは、SNMPv1トラップはTrap-PDUとして定義され、SNMPv2トラップはNOTIFICATION-TYPEとして定義されます。 SNMPv2は、代わりに汎用トラップの概念も廃止し、パブリックMIBで多くの特定のトラップ(適切に言えば、通知)を定義します。

SNMPv3トラップ。これは、認証(資格情報ベース)(一般的な認証技術MD5またはSHA)およびプライバシー機能(暗号化技術-DES、3DES、AES128/192/256)が追加されたSNMPv2トラップです。

ほとんどのSNMP実装はv1のみをサポートします。

Reference_1Reference_2

以下は、snmpv3トラップを送信するためのSNMP4jコードです。

  public void sendTrap_Version3() {
    //TrasportMapping
    TransportMapping transport;
    try {
        transport = new DefaultUdpTransportMapping();
        transport.listen();
        //Creating SNMP object
        snmp = new Snmp(transport);

         //Creating USM
        USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
        SecurityModels.getInstance().addSecurityModel(usm);

        // Add user to the USM
        snmp.getUSM().addUser(
                new OctetString("MD5DES"),
                new UsmUser(new OctetString("MD5DES"), AuthMD5.ID, new OctetString("MD5DESUsrAuthPwd"), PrivDES.ID,
                        new OctetString("MD5DESUsrPrivPwd")));

        // Create the target
        Address targetAddress = GenericAddress.parse("udp:10.120.7.107/162");
        UserTarget target = new UserTarget();
        target.setAddress(targetAddress);
        target.setRetries(3);
        target.setTimeout(5000);
        target.setVersion(SnmpConstants.version3);
        target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
        target.setSecurityName(new OctetString("MD5DES"));
        // Create PDU
        ScopedPDU pdu = new ScopedPDU();

       pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTic(new Date().toString())));
       pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,SnmpConstants.linkDown));
       pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress("127.3.4.1")));
       pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1.1"), new Integer32(1)));

        pdu.setType(ScopedPDU.TRAP);
        snmp.send(pdu, target);

    } catch (IOException e) {
        e.printStackTrace();
    }
}
3