2011-12-30 16 views

答えて

6

これは、これは、関連するプログラミング、そしておそらくServerFaultのに属していないことを意味する、RFC文書を通過する必要があります。

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

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

「SNMPエージェントがv2またはv3のトラップメッセージを送信すると、バグになる可能性があります。」 @ lex-liあなたはこのコメントのための参照やURLがありますか?ありがとう。 – k1eran

+2

これは私の個人的な見解で、RFC1157とRFC3416に基づいています。新しいTRAPメッセージフォーマットは後者で定義されているので、旧式のフォーマットは完全に時代遅れになるはずです。実際には、一部のデバイスがSNMP v2の古いフォーマットを送信していることを知っていましたが(#SNMPライブラリユーザーがそれを報告しました)、ファームウェアのバグであるはずです。 –

+0

おそらく、上記の#3が原因ですが、Wiresharkはヘッダーに 'msgVersion:3'、' msgData'に 'snmpV2-trap'というパケットを表示します(解読後) – vyom

2

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

は、SNMPv1トラップがトラップ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(); 
    } 
} 
+0

上記のv2のスニペットはありますか?スニペットに関連するセキュリティはなぜですか? – ifelsemonkey

関連する問題