2017-03-13 21 views
2

지난 며칠 동안 Auth 및 priv 문구를 사용하여 SNMPV3 트랩을 보내려고 고민 중입니다. 문제는 : Auth-Priv와 함께 첫 번째 트랩 SNMPv3을받은 후 때때로 (약 2 분) 트랩을받을 수 없습니다. 수신기는 오는 모든 함정을 무시하는 것과 같습니다. 여기 첫 번째 전송 후 SNMPv3 트랩을 몇 번받을 수 없습니다. [snmp4j-Java]

내 코드 경우 : Receiver.java

try { 
     // set udpAdress and transportMapping 
     final UdpAddress udpAddress = new UdpAddress(162); 
     final TransportMapping transportMapping = new   DefaultUdpTransportMapping(udpAddress); 

     // Protocole de sécurité +usm +snmp 
     this.snmp = new Snmp(new MessageDispatcherImpl(), transportMapping); 
     SecurityProtocols.getInstance().addDefaultProtocols(); 
     final USM usm = new USM(SecurityProtocols.getInstance(), 
      new OctetString(MPv3.createLocalEngineID(new OctetString())), 
      0); 
     SecurityProtocols.getInstance().addPrivacyProtocol(new PrivDES()); 
     usm.setEngineDiscoveryEnabled(true); 

     // Add the MPv 
     snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1()); 
     snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); 
     snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm)); 

     // Security model 
     SecurityModels.getInstance().addSecurityModel(usm); 

     // Add user 
     snmp.getUSM().addUser(new OctetString("v3AuthSHAPrivDESSecName"), 
      new UsmUser(new OctetString("v3AuthSHAPrivDESSecName"), AuthMD5.ID, 
       new OctetString("v3AuthSHAPrivDESAuthPassword"), PrivDES.ID, 
       new OctetString("v3AuthSHAPrivDESPrivPassword"))); 

     // Launch of the listener 
     this.snmp.addCommandResponder(this); 
     snmp.listen();` 

Sender.java

try { 
     // set udpAdress and transportMapping 
     Address targetAddress = GenericAddress.parse("udp:" + ipAddress + "/" + port); 
     TransportMapping transport = new DefaultUdpTransportMapping(); 
     Snmp snmp = new Snmp(transport); 

     // Protocole de sécurité +usm +snmp 
     SecurityProtocols.getInstance().addDefaultProtocols(); 
     final USM usm = new USM(SecurityProtocols.getInstance(), 
      new OctetString(MPv3.createLocalEngineID(new OctetString())), 
      0); 

     SecurityProtocols.getInstance().addPrivacyProtocol(new PrivDES()); 
     SecurityModels.getInstance().addSecurityModel(usm); 

     transport.listen(); 

     // Ajout d'un user avec les paramètres de sécurité 
     snmp.getUSM().addUser(new OctetString("v3AuthSHAPrivDESSecName"), 
      new UsmUser(new OctetString("v3AuthSHAPrivDESSecName"), AuthMD5.ID, 
       new OctetString("v3AuthSHAPrivDESAuthPassword"), PrivDES.ID, 
       new OctetString("v3AuthSHAPrivDESPrivPassword"))); 

     // Create Target 
     UserTarget target = new UserTarget(); 
     target.setAddress(targetAddress); 
     target.setRetries(1111); 
     target.setTimeout(11111500); 
     target.setVersion(SnmpConstants.version3); 
     target.setSecurityLevel(SecurityLevel.AUTH_PRIV); 
     target.setSecurityName(new OctetString("v3AuthSHAPrivDESSecName")); 

     // Create PDU 1 for V3 
     ScopedPDU pdu = new ScopedPDU(); 
     pdu.setType(PDU.TRAP); 
     pdu.add(new VariableBinding(SnmpConstants.sysUpTime)); 
     pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, SnmpConstants.linkDown)); 
     pdu.add(new VariableBinding(new OID(trapOid), new OctetString("V33333"))); 
     snmp.send(pdu, target); 

     System.out.println("Sending Trap to (IP:Port)=> " + ipAddress + ":" + port); 

     snmp.addCommandResponder(new CommandResponder() { 
      public void processPdu(CommandResponderEvent arg0) { 
       System.out.println(arg0); 
      } 
     }); 
     snmp.close(); 
  • 나는 snmp4j-1.1을 사용하고 있습니다 의존. 나는 왜 그것이 처음 2 분 후에 오는 트랩을 무시하는지 모르겠다. 당신을위한

    많은 감사의 친구들은 내가 답을 발견

+0

안녕하세요 친구 :-), 나는 당신의 도움이 사전에 내 질문에, speciellay "히 친구 :"하지만,) 내 편집 X을 나던 감사를 일부 편집을 추가하고 있으 아이디어, 큰 위로 –

답변

0

하는 데 도움이! : D 그냥 snmp4j-2. *에 종속성을 변경하면 작동합니다. 이제는 snmp4j-2.5.0을 사용했습니다. 그리고 완벽하게 작동합니다. 위의 코드는 사용하고자한다면 완벽합니다.

좋은 코드 일