V1、v2c、v3トラップPDU /フォーマットの違いを説明してください。
これには、RFCドキュメントを確認する必要があります。つまり、これはプログラミング関連ではなく、おそらくServerFaultに属しています。
あなたにいくつかのヒントを与えます:
SNMPv2は、わずかに異なる方法でトラップを定義します。
MIBでは、SNMPv1トラップはTrap-PDUとして定義され、SNMPv2トラップはNOTIFICATION-TYPEとして定義されます。 SNMPv2は、代わりに汎用トラップの概念も廃止し、パブリックMIBで多くの特定のトラップ(適切に言えば、通知)を定義します。
SNMPv3トラップ。これは、認証(資格情報ベース)(一般的な認証技術MD5またはSHA)およびプライバシー機能(暗号化技術-DES、3DES、AES128/192/256)が追加されたSNMPv2トラップです。
ほとんどのSNMP実装はv1のみをサポートします。
以下は、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();
}
}