2016-06-05 9 views
0

Ich versuche, ein einfaches Beispiel für SNMP-Manager und Agenten zu erstellen. alles, was ich tun muss, ist nur den aktuellen Wert von gegebenen OID zu lesen, schreiben Sie einen neuen Wert, um es zu ersetzen, und lesen Sie es zurück.wie man den Wert auf Mib mit snmp4j setzen

meine Funktion funktioniert gut, aber mein Satz nicht. in der Zeile: PDU responsePDU = event.getResponse(); ResponsePDU gleich Null und ich verstehe nicht warum? jede Hilfe wird sehr willkommen sein!

public ResponseEvent set(OID oid,String val) throws IOException 
{ 
    PDU pdu = new PDU(); 
    VariableBinding varBind = new VariableBinding(oid,new OctetString(val)); 
    pdu.add(varBind); 
    pdu.setType(PDU.SET); 
    pdu.setRequestID(new Integer32(1)); 
    Target target=getTargetForWrite(); 

    ResponseEvent event = snmp.set(pdu, target); 
    if(event != null) 
    { 
     System.out.println("\nResponse:\nGot Snmp Set Response from Agent"); 
     System.out.println("Snmp Set Request = " + event.getRequest().getVariableBindings()); 
     PDU responsePDU = event.getResponse(); 
     System.out.println("\nresponsePDU = "+responsePDU); 
     if (responsePDU != null) 
     { 
     int errorStatus = responsePDU.getErrorStatus(); 
     int errorIndex = responsePDU.getErrorIndex(); 
     String errorStatusText = responsePDU.getErrorStatusText(); 
     System.out.println("\nresponsePDU = "+responsePDU); 
     if (errorStatus == PDU.noError) 
     { 
      System.out.println("Snmp Set Response = " + responsePDU.getVariableBindings()); 
     } 
     else 
     { 
      System.out.println("errorStatus = "+responsePDU); 
      System.out.println("Error: Request Failed"); 
      System.out.println("Error Status = " + errorStatus); 
      System.out.println("Error Index = " + errorIndex); 
      System.out.println("Error Status Text = " + errorStatusText); 
     } 
     } 

     return event; 
    } 
    throw new RuntimeException("GET timed out"); 
} 



    private Target getTargetForWrite() 
{ 
    CommunityTarget target = new CommunityTarget(); 
    target.setCommunity(new OctetString("private")); 
    target.setVersion(SnmpConstants.version2c); 
    target.setAddress(GenericAddress.parse(address)); 
    target.setRetries(2); 
    target.setTimeout(1500); 

    return target; 
} 
+0

setzen Sie nicht eine Antwort benötigen aus einem snmp.send resultierende anstelle eines snmp.set von den getResponse auszuführen? Nur raten, nicht mit snmp4j in der Praxis arbeiten. Vielleicht bieten auch die Import-Aussagen von externen "Dinge" verwiesen würde helfen, die wissen, um Ihnen leichter zu helfen. – Dilettant

+0

ich fange gerade an, snmp zu lernen, aber wie ich verstehe, snmp.send für get Befehl und snmp.set für set Befehl verwendet –

Antwort

0

Notwendigkeit, die Gemeinde als öffentliche

private Target getTargetForWrite() 
{ 
    CommunityTarget target = new CommunityTarget(); 
    target.setCommunity(new OctetString("public"));\\<--- 
    target.setVersion(SnmpConstants.version2c); 
    target.setAddress(GenericAddress.parse(address)); 
    target.setRetries(2); 
    target.setTimeout(1500); 

    return target; 
}