Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class SNMPManager {
- Snmp snmp = null;
- String address = null;
- /**
- * Constructor
- *
- * @param add
- */
- public SNMPManager(String add) {
- address = add;
- }
- public static void main(String[] args) throws IOException {
- /**
- * Port 161 is used for Read and Other operations Port 162 is used for the trap
- * generation
- */
- SNMPManager client = new SNMPManager("udp:127.0.0.1/161");
- client.start();
- /**
- * OID - .1.3.6.1.2.1.1.1.0 => SysDec OID - .1.3.6.1.2.1.1.5.0 => SysName => MIB
- * explorer will be usefull here, as discussed in previous article
- */
- String sysDescr = client.getAsString(new OID(".1.3.6.1.2.1.1.1.0"));
- System.out.println(sysDescr);
- }
- /**
- * Start the Snmp session. If you forget the listen() method you will not get
- * any answers because the communication is asynchronous and the listen() method
- * listens for answers.
- *
- * @throws IOException
- */
- public void start() throws IOException {
- TransportMapping<?> transport = new DefaultUdpTransportMapping();
- snmp = new Snmp(transport);
- // Do not forget this line!
- transport.listen();
- }
- /**
- * Method which takes a single OID and returns the response from the agent as a
- * String.
- *
- * @param oid
- * @return
- * @throws IOException
- */
- public String getAsString(OID oid) throws IOException {
- ResponseEvent event = get(new OID[] { oid });
- return event.getResponse().get(0).getVariable().toString();
- }
- /**
- * This method is capable of handling multiple OIDs
- *
- * @param oids
- * @return
- * @throws IOException
- */
- public ResponseEvent get(OID oids[]) throws IOException {
- PDU pdu = new PDU();
- for (OID oid : oids) {
- pdu.add(new VariableBinding(oid));
- }
- pdu.setType(PDU.GET);
- ResponseEvent event = snmp.send(pdu, getTarget(), null);
- if (event != null) {
- return event;
- }
- throw new RuntimeException("GET timed out");
- }
- 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 = getTarget();
- 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("SET timed out");
- }
- /**
- * This method returns a Target, which contains information about where the data
- * should be fetched and how.
- *
- * @return
- */
- private Target getTarget() {
- Address targetAddress = GenericAddress.parse(address);
- CommunityTarget target = new CommunityTarget();
- target.setCommunity(new OctetString("public"));
- target.setAddress(targetAddress);
- target.setRetries(2);
- target.setTimeout(1500);
- target.setVersion(SnmpConstants.version2c);
- return target;
- }
- }
- public class SNMPAgent extends BaseAgent {
- private String address;
- /**
- *
- * @param address
- * @throws IOException
- */
- public SNMPAgent(String address) throws IOException {
- /**
- * Creates a base agent with boot-counter, config file, and a CommandProcessor
- * for processing SNMP requests. Parameters: "bootCounterFile" - a file with
- * serialized boot-counter information (read/write). If the file does not exist
- * it is created on shutdown of the agent. "configFile" - a file with serialized
- * configuration information (read/write). If the file does not exist it is
- * created on shutdown of the agent. "commandProcessor" - the CommandProcessor
- * instance that handles the SNMP requests.
- */
- super(new File("conf.agent"), new File("bootCounter.agent"),
- new CommandProcessor(new OctetString(MPv3.createLocalEngineID())));
- this.address = address;
- }
- /**
- * Adds community to security name mappings needed for SNMPv1 and SNMPv2c.
- */
- @Override
- protected void addCommunities(SnmpCommunityMIB communityMIB) {
- Variable[] com2sec = new Variable[] { new OctetString("public"), new OctetString("cpublic"), // security name
- getAgent().getContextEngineID(), // local engine ID
- new OctetString("public"), // default context name
- new OctetString(), // transport tag
- new Integer32(StorageType.nonVolatile), // storage type
- new Integer32(RowStatus.active) // row status
- };
- MOTableRow<?> row = communityMIB.getSnmpCommunityEntry()
- .createRow(new OctetString("public2public").toSubIndex(true), com2sec);
- communityMIB.getSnmpCommunityEntry().addRow((SnmpCommunityEntryRow) row);
- }
- /**
- * Adds initial notification targets and filters.
- */
- @Override
- protected void addNotificationTargets(SnmpTargetMIB arg0, SnmpNotificationMIB arg1) {
- // TODO Auto-generated method stub
- }
- /**
- * Adds all the necessary initial users to the USM.
- */
- @Override
- protected void addUsmUser(USM arg0) {
- // TODO Auto-generated method stub
- }
- /**
- * Adds initial VACM configuration.
- */
- @Override
- protected void addViews(VacmMIB vacm) {
- vacm.addGroup(SecurityModel.SECURITY_MODEL_SNMPv2c, new OctetString("cpublic"), new OctetString("v1v2group"),
- StorageType.nonVolatile);
- vacm.addAccess(new OctetString("v1v2group"), new OctetString("public"), SecurityModel.SECURITY_MODEL_ANY,
- SecurityLevel.NOAUTH_NOPRIV, MutableVACM.VACM_MATCH_EXACT, new OctetString("fullReadView"),
- new OctetString("fullWriteView"), new OctetString("fullNotifyView"), StorageType.nonVolatile);
- vacm.addViewTreeFamily(new OctetString("fullReadView"), new OID("1.3"), new OctetString(),
- VacmMIB.vacmViewIncluded, StorageType.nonVolatile);
- }
- /**
- * Unregister the basic MIB modules from the agent's MOServer.
- */
- @Override
- protected void unregisterManagedObjects() {
- // TODO Auto-generated method stub
- }
- /**
- * Register additional managed objects at the agent's server.
- */
- @Override
- protected void registerManagedObjects() {
- // TODO Auto-generated method stub
- }
- @SuppressWarnings("unchecked")
- protected void initTransportMappings() throws IOException {
- transportMappings = new TransportMapping[1];
- Address addr = GenericAddress.parse(address);
- TransportMapping<?> tm = TransportMappings.getInstance().createTransportMapping(addr);
- transportMappings[0] = tm;
- }
- /**
- * Start method invokes some initialization methods needed to start the agent
- *
- * @throws IOException
- */
- public void start() throws IOException {
- init();
- // This method reads some old config from a file and causes
- // unexpected behavior.
- // loadConfig(ImportModes.REPLACE_CREATE);
- addShutdownHook();
- getServer().addContext(new OctetString("public"));
- finishInit();
- run();
- sendColdStartNotification();
- }
- /**
- * Clients can register the MO they need
- */
- public void registerManagedObject(ManagedObject mo) {
- try {
- server.register(mo, null);
- } catch (DuplicateRegistrationException ex) {
- throw new RuntimeException(ex);
- }
- }
- public void unregisterManagedObject(MOGroup moGroup) {
- moGroup.unregisterMOs(server, getContext(moGroup));
- }
- }
- public class MOCreator {
- public static MOScalar<Variable> createReadOnly(OID oid,Object value ){
- return new MOScalar<Variable>(oid,
- MOAccessImpl.ACCESS_READ_WRITE,
- getVariable(value));
- }
- private static Variable getVariable(Object value) {
- if(value instanceof String) {
- return new OctetString((String)value);
- }
- throw new IllegalArgumentException("Unmanaged Type: " + value.getClass());
- }
- }
- public class TestSNMPAgent {
- String siteOIDNumber = "1";
- String dataOIDNumber = "1";
- String sensorOIDNumber = "1";
- OID newOIDdata = new OID("1.3.6.1.4.1.1234.5." + siteOIDNumber + ".2." + dataOIDNumber + "." + sensorOIDNumber + ".0");
- OID newOIDdata2 = new OID("1.3.6.1.4.1.1234.5.1.2.1.2.0");
- OID newOIDdata3 = new OID("1.3.6.1.4.1.1234.5.1.2.1.3.0");
- public static void main(String[] args) throws IOException {
- TestSNMPAgent client = new TestSNMPAgent("udp:127.0.0.1/161");
- client.init();
- }
- SNMPAgent agent = null;
- /**
- * This is the client which we have created earlier
- */
- SNMPManager client = null;
- String address = null;
- /**
- * Constructor
- *
- * @param add
- */
- public TestSNMPAgent(String add) {
- address = add;
- }
- /**
- * Initiates the testing of the SNMP Agent.
- * @throws IOException
- */
- private void init() throws IOException {
- /*agent = new SNMPAgent("172.21.1.103/2001");*/
- agent = new SNMPAgent("172.21.1.103/2010");
- agent.start();
- // Since BaseAgent registers some MIBs by default we need to unregister
- // one before we register our own sysDescr. Normally you would
- // override that method and register the MIBs that you need
- agent.unregisterManagedObject(agent.getSnmpv2MIB());
- //agent.registerManagedObject(MOCreator.createReadOnly(sysDescr,"This Description is set By KGrewe"));
- agent.registerManagedObject(MOCreator.createReadOnly(newOIDdata, "50"));
- agent.registerManagedObject(MOCreator.createReadOnly(newOIDdata2, "NaN"));
- agent.registerManagedObject(MOCreator.createReadOnly(newOIDdata3, "3"));
- SNMPManager client1 = new SNMPManager("udp:127.21.1.103/2010");
- client1.start();
- client1.set(newOIDdata, "30");
- //System.out.println(newOIDdata);
- // Get back Value which is set
- //System.out.println(client1.getAsString(newOIDdata));
- while(true) {
- }
- }
- }
Add Comment
Please, Sign In to add comment