Refine search
/** * Construct the PDU to perform the SNMP Get request and returns * the result in order to create the flow file. * @return {@link ResponseEvent} */ public ResponseEvent get() { try { PDU pdu = null; if(this.target.getVersion() == SnmpConstants.version3) { pdu = new ScopedPDU(); } else { pdu = new PDU(); } pdu.add(new VariableBinding(this.oid)); pdu.setType(PDU.GET); return this.snmp.get(pdu, this.target); } catch (IOException e) { logger.error("Failed to get information from SNMP agent; " + this, e); throw new ProcessException(e); } }
pdu = new ScopedPDU(); } else { pdu = new PDU(); pdu.setType(PDU.SET); try { ResponseEvent response = this.targetResource.set(pdu); if(response.getResponse() == null) { processSession.transfer(processSession.penalize(flowFile), REL_FAILURE); this.getLogger().error("Set request timed out or parameters are incorrect."); context.yield(); } else if(response.getResponse().getErrorStatus() == PDU.noError) { flowFile = SNMPUtils.updateFlowFileAttributesWithPduProperties(pdu, flowFile, processSession); processSession.transfer(flowFile, REL_SUCCESS); processSession.getProvenanceReporter().send(flowFile, this.snmpTarget.getAddress().toString()); } else { final String error = response.getResponse().getErrorStatusText(); flowFile = SNMPUtils.addAttribute(SNMPUtils.SNMP_PROP_PREFIX + "error", error, flowFile, processSession); processSession.transfer(processSession.penalize(flowFile), REL_FAILURE); this.getLogger().error("Failed while executing SNMP Set [{}] via " + this.targetResource + ". Error = {}", new Object[]{response.getRequest().getVariableBindings(), error});
public static void main(String[] args) throws Exception { // Create PDU PDU trap = new PDU(); trap.setType(PDU.TRAP); OID oid = new OID("1.2.3.4.5"); trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid)); trap.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here trap.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description"))); //Add Payload Variable var = new OctetString("some string"); trap.add(new VariableBinding(oid, var)); // Specify receiver Address targetaddress = new UdpAddress("10.101.21.32/162"); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setVersion(SnmpConstants.version2c); target.setAddress(targetaddress); // Send Snmp snmp = new Snmp(new DefaultUdpTransportMapping()); snmp.send(trap, target, null, null); }
PDU pdu = new PDU(); OID oid = new OID(mibOid); Variable var = new OctetString(hostName); VariableBinding varBind = new VariableBinding(oid, var); pdu.add(varBind); pdu.setType(PDU.SET); pdu.setRequestID(new Integer32(1)); Snmp snmp = new Snmp(transport); ResponseEvent response = snmp.set(pdu, comtarget); PDU responsePDU = response.getResponse(); int errorStatus = responsePDU.getErrorStatus(); int errorIndex = responsePDU.getErrorIndex(); String errorStatusText = responsePDU.getErrorStatusText(); LOG.info("Snmp Set Response = " + responsePDU.getVariableBindings()); } else { LOG.info("Error: Request Failed"); LOG.info("Error: Agent Timeout... "); snmp.close(); return true;
PDU pdu = new PDU(); pdu.setType(PDU.GETNEXT); pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1"))); OctetString community = new OctetString("public"); target.setCommunity(community); target.setVersion(SnmpConstants.version2c); transport.listen(); System.out.println("READY: "+System.currentTimeMillis()); Snmp snmp = new Snmp(transport); ResponseEvent responseEvent = snmp.send(pdu, target); System.out.println("response " + responseEvent.toString()); PDU responsePDU = responseEvent.getResponse(); if (responsePDU == null){ System.out.println("Request timed out"); System.out.println("Received response "+responsePDU); System.out.println("Peer Address: "+responseEvent.getPeerAddress()); } catch (UnknownHostException e1) {
/** * <p>snmpGet.</p> * * @param oidString a {@link java.lang.String} object. * @return a {@link java.lang.String} object. * @throws java.io.IOException if any. */ public String snmpGet(String oidString) throws IOException { OID oid = new OID(oidString); PDU pdu = pduFactory.createPDU(getTarget()); pdu.add(new VariableBinding(oid)); pdu.setType(PDU.GET); ResponseEvent response; response = snmp.send(pdu, getTarget()); if (response != null) { PDU responsePDU = response.getResponse(); if (responsePDU != null) { if (responsePDU.getErrorStatus() == PDU.noError) { return responsePDU.get(0).toValueString(); } } logger.info("GET reposne from " + getTarget().getAddress() + " was null!"); return null; } logger.info("GET from " + getTarget().getAddress() + " has timed out!"); return null; }
private void processResponse(final PDU response) throws SnmpException { try { LOG.debug("Received a tracker PDU of type {} from {} of size {}, errorStatus = {}, errorStatusText = {}, errorIndex = {}", PDU.getTypeString(response.getType()), getAddress(), response.size(), response.getErrorStatus(), response.getErrorStatusText(), response.getErrorIndex()); if (response.getType() == PDU.REPORT) { handleAuthError("A REPORT PDU was returned from the agent. This is most likely an authentication problem. Please check the config"); } else { if (!processErrors(response.getErrorStatus(), response.getErrorIndex())) { if (response.size() == 0) { // NMS-6484 handleError("A PDU with no errors and 0 varbinds was returned from the agent at " + getAddress() + ". This seems to be related with a broken SNMP agent."); } else { for (int i = 0; i < response.size(); i++) { final VariableBinding vb = response.get(i); final SnmpObjId receivedOid = SnmpObjId.get(vb.getOid().getValue()); final SnmpValue val = new Snmp4JValue(vb.getVariable()); Snmp4JWalker.this.processResponse(receivedOid, val); } } } buildAndSendNextPdu(); } } catch (final RuntimeException|SnmpException e) { handleFatalError(e); } }
@Override public void addOid(SnmpObjId snmpObjId) { VariableBinding varBind = new VariableBinding(new OID(snmpObjId.getIds())); m_nextPdu.add(varBind); }
Variable var = null; if (splits.length == 2) { // no SMI syntax defined var = new OctetString(snmpPropValue); } else { int smiSyntax = Integer.valueOf(splits[2]); VariableBinding varBind = new VariableBinding(new OID(snmpPropName), var); pdu.add(varBind); result = true;
public boolean sendTrap() throws IOException{ //create PDU PDU trap = new PDU(); trap.setType(PDU.TRAP); OID oid = new OID(".1.3.6.1.3.1.1.1.36.0"); trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid)); Variable var = new OctetString("My system is in trouble"); trap.add(new VariableBinding(oid, var)); //create target Address targetaddress = new UdpAddress("localhost/162"); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setVersion(SnmpConstants.version2c); target.setAddress(targetaddress); //send trap Snmp snmp = new Snmp(new DefaultUdpTransportMapping()); snmp.send(trap, target, null, null); return true; } }
public void testGetSysName() throws IOException { Snmp snmp = new Snmp(new DefaultUdpTransportMapping()); snmp.listen(); Address addr = new UdpAddress(InetAddress.getLocalHost(), 9161); //Address addr = new UdpAddress(InetAddressUtils.addr("192.168.0.100"), 161); Target target = new CommunityTarget(addr, new OctetString("public")); target.setVersion(SnmpConstants.version1); target.setTimeout(3000); target.setRetries(3); PDUv1 getRequest = new PDUv1(); getRequest.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0"))); ResponseEvent e = snmp.get(getRequest, target); PDU response = e.getResponse(); assertEquals(new OctetString("mockhost"), response.get(0).getVariable()); }
private void processPDUv2c(PDU pdu){ StringBuffer sbuf = new StringBuffer(); sbuf.append("\nV2 Trap from agent ").append(this.bindAddress.toString()); sbuf.append(" on port ").append(this.port); sbuf.append("\n"); Vector bindings = pdu.getVariableBindings(); Iterator it = bindings.iterator(); int counter = 0; while (it.hasNext()) { VariableBinding vb = (VariableBinding)it.next(); if (vb != null) { sbuf.append("Varbind[").append(counter++).append("] := "); sbuf.append(vb.getOid().toString()).append(" --> "); sbuf.append(vb.getVariable().toString()).append("\n"); } } sbuf.append("\nLength............. ").append(counter); log.debug(sbuf.toString()); }
@Override protected void doStart() throws Exception { super.doStart(); this.targetAddress = GenericAddress.parse(this.endpoint.getAddress()); LOG.debug("targetAddress: {}", targetAddress); this.usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); SecurityModels.getInstance().addSecurityModel(this.usm); // setting up target this.target = new CommunityTarget(); this.target.setCommunity(new OctetString(endpoint.getSnmpCommunity())); this.target.setAddress(this.targetAddress); this.target.setRetries(this.endpoint.getRetries()); this.target.setTimeout(this.endpoint.getTimeout()); this.target.setVersion(this.endpoint.getSnmpVersion()); this.pdu = new PDU(); for (OID oid : this.endpoint.getOids()) { this.pdu.add(new VariableBinding(oid)); } this.pdu.setErrorIndex(0); this.pdu.setErrorStatus(0); this.pdu.setMaxRepetitions(0); this.pdu.setType(PDU.GET); }
@Override public void commit(SubRequest request) { OID oid = request.getVariableBinding().getOid(); if (translation != null) { oid = translation.forwardTranslate(oid); } VariableBinding vb = new VariableBinding(oid, request.getVariableBinding().getVariable()); Target target = targetMIB.getTarget(targetName, contextEngineID, contextName); PDU pdu = pduFactory.createPDU(target); pdu.setType(PDU.SET); pdu.add(vb); try { ResponseEvent resp = session.send(pdu, target); if (resp.getResponse() != null) { PDU rpdu = resp.getResponse(); if (rpdu.getErrorStatus() != PDU.noError) { request.setErrorStatus(rpdu.getErrorStatus()); } request.getStatus().setPhaseComplete(true); } else { request.setErrorStatus(PDU.genErr); } } catch (IOException e) { request.setErrorStatus(PDU.genErr); logger.error("IOException in commit SET sub-request " + request + " to " + target, e); } }
/** * @param request * @return */ private PDU processGetNext(PDU request) { PDU response = request; response.setErrorIndex(0); response.setErrorStatus(0); response.setType(PDU.RESPONSE); Vector<? extends VariableBinding> varBinds = response.getVariableBindings(); for(int i = 0; i < varBinds.size(); i++) { VariableBinding varBind = varBinds.get(i); VariableBinding nextVarBind = m_agent.getNext(varBind.getOid()); if (nextVarBind == null) { if (response instanceof PDUv1) { if (response.getErrorIndex() == 0) { response.setErrorIndex(i+1); response.setErrorStatus(PDU.noSuchName); } } else { varBind.setVariable(Null.endOfMibView); } } else { response.set(i, nextVarBind); } } return response; }
requestPDU.addAll(vars); if(requestPDU.size() < 1) return Collections.emptyMap(); ResponseEvent re = snmp.send(requestPDU, snmpTarget); if(re == null) { throw new IOException("SNMP Timeout"); PDU response = re.getResponse(); if(response != null && response.getErrorStatus() == SnmpConstants.SNMP_ERROR_SUCCESS) { snmpVars = new SnmpVars(response); doAgain = false; throw new IOException("SNMP Timeout"); } else { int index = response.getErrorIndex() - 1; VariableBinding vb = response.get(index); logger.warn(response.getErrorStatusText() + " on " + vb.getOid().toString()); if(requestPDU.size() > 1) { requestPDU = response; response = null; requestPDU.remove(index); } else doAgain = false;
int pduType = request.getCommandEvent().getPDU().getType(); if (SnmpRequest.getViewType(pduType) == VACM.VIEW_NOTIFY) { return multipleForward(request); } else { ResponseEvent resp = singleForward(request); if ((resp != null) && (resp.getResponse() != null)) { PDU respPDU = resp.getResponse(); PDU translatedResponse = DefaultPDUFactory.createPDU( request.getCommandEvent().getSecurityModel()); if (!translatedResponse.getClass().equals(respPDU.getClass())) { translatedResponse.setType(respPDU.getType()); translatedResponse.addAll(respPDU.toArray()); translatedResponse.setErrorIndex(respPDU.getErrorIndex()); translatedResponse.setErrorStatus(respPDU.getErrorStatus()); } else { translatedResponse = respPDU; if (translatedResponse.getType() == PDU.RESPONSE) { translatedResponse.setRequestID( request.getCommandEvent().getPDU().getRequestID()); if ((translatedResponse instanceof ScopedPDU) && (request.getCommandEvent().getPDU() instanceof ScopedPDU)) {
private VariableBinding getSingleVariable(OID oid) throws IOException { PDU pdu = this.pduFactory.createPDU(getTarget()); pdu.setType(PDU.GETNEXT); pdu.add(new VariableBinding(oid)); ResponseEvent responseEvent = snmp.send(pdu, getTarget()); PDU responsePDU = null; if (responseEvent != null) responsePDU = responseEvent.getResponse(); VariableBinding vb = null; if (responsePDU != null) vb = responsePDU.get(0); return vb; }
/** * TODO: Merge this logic with {@link Snmp4JWalker.Snmp4JResponseListener} #processResponse(PDU response) */ private static SnmpValue[] processResponse(Snmp4JAgentConfig agentConfig, ResponseEvent responseEvent) throws IOException { SnmpValue[] retvalues = { null }; if (responseEvent.getResponse() == null) { LOG.warn("processResponse: Timeout. Agent: {}, requestID={}", agentConfig, responseEvent.getRequest().getRequestID()); } else if (responseEvent.getError() != null) { LOG.warn("processResponse: Error during get operation. Error: {}, requestID={}", responseEvent.getError().getLocalizedMessage(), responseEvent.getError(), responseEvent.getRequest().getRequestID()); } else if (responseEvent.getResponse().getType() == PDU.REPORT) { LOG.warn("processResponse: Error during get operation. Report returned with varbinds: {}, requestID={}", responseEvent.getResponse().getVariableBindings(), responseEvent.getRequest().getRequestID()); } else if (responseEvent.getResponse().getVariableBindings().size() < 1) { LOG.warn("processResponse: Received PDU with 0 varbinds. Agent: {}, requestID={}", agentConfig, responseEvent.getRequest().getRequestID()); } else if (responseEvent.getResponse().get(0).getSyntax() == SMIConstants.SYNTAX_NULL) { LOG.info("processResponse: Null value returned in varbind: {}. Agent: {}, requestID={}", responseEvent.getResponse().get(0), agentConfig, responseEvent.getRequest().getRequestID()); } else { retvalues = convertResponseToValues(responseEvent); LOG.debug("processResponse: SNMP operation successful, value: {}", (Object)retvalues); } return retvalues; }
/** * <p>getNext.</p> * * @param oids an array of {@link org.snmp4j.smi.OID} objects. * @return a {@link org.snmp4j.event.ResponseEvent} object. * @throws java.io.IOException if any. */ public ResponseEvent snmpGetNext(OID oids[]) throws IOException { PDU pdu = pduFactory.createPDU(getTarget()); for (OID oid : oids) { pdu.add(new VariableBinding(oid)); } pdu.setType(PDU.GETNEXT); ResponseEvent response; response = snmp.send(pdu, getTarget()); if (response != null) { PDU responsePDU = response.getResponse(); if (responsePDU != null) { if (responsePDU.getErrorStatus() == PDU.noError) { return response; } } logger.log(Priority.INFO, "GET reposne from " + getTarget().getAddress() + " was null!"); return null; } logger.log(Priority.INFO, "GET from " + getTarget().getAddress() + " has timed out!"); return null; }