/src/cucky/jGuard/snmp
parent
8e8b3ec31b
commit
f9c84518ed
|
|
@ -0,0 +1,153 @@
|
||||||
|
package cucky.jGuard.snmp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.snmp4j.CommunityTarget;
|
||||||
|
import org.snmp4j.PDU;
|
||||||
|
import org.snmp4j.Snmp;
|
||||||
|
import org.snmp4j.Target;
|
||||||
|
import org.snmp4j.TransportMapping;
|
||||||
|
import org.snmp4j.event.ResponseEvent;
|
||||||
|
import org.snmp4j.mp.SnmpConstants;
|
||||||
|
import org.snmp4j.smi.Address;
|
||||||
|
import org.snmp4j.smi.GenericAddress;
|
||||||
|
import org.snmp4j.smi.OID;
|
||||||
|
import org.snmp4j.smi.OctetString;
|
||||||
|
import org.snmp4j.smi.VariableBinding;
|
||||||
|
import org.snmp4j.transport.DefaultUdpTransportMapping;
|
||||||
|
import org.snmp4j.util.DefaultPDUFactory;
|
||||||
|
import org.snmp4j.util.TreeEvent;
|
||||||
|
import org.snmp4j.util.TreeUtils;
|
||||||
|
|
||||||
|
public class SNMPManager {
|
||||||
|
|
||||||
|
private Snmp snmp = null;
|
||||||
|
private String address = null;
|
||||||
|
private String community = "public";
|
||||||
|
private int version;
|
||||||
|
|
||||||
|
public static final int version1 = SnmpConstants.version1;
|
||||||
|
public static final int version2c = SnmpConstants.version2c;
|
||||||
|
public static final int version3 = SnmpConstants.version3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param add
|
||||||
|
*/
|
||||||
|
public SNMPManager(String address, String port, String community, int version) {
|
||||||
|
this.address = "udp:"+address+"/"+port;
|
||||||
|
this.community = community;
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 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");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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(this.address);
|
||||||
|
CommunityTarget target = new CommunityTarget();
|
||||||
|
target.setCommunity(new OctetString(this.community));
|
||||||
|
target.setAddress(targetAddress);
|
||||||
|
target.setRetries(2);
|
||||||
|
target.setTimeout(1500);
|
||||||
|
target.setVersion(version);
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
public String getSysDescr() throws IOException{
|
||||||
|
return getAsString(SnmpConstants.sysDescr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUptime() throws IOException{
|
||||||
|
return getAsString(SnmpConstants.sysUpTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TreeEvent> getTree(String sOid){
|
||||||
|
TreeUtils treeUtils = new TreeUtils(snmp, new DefaultPDUFactory());
|
||||||
|
List<TreeEvent> events = treeUtils.getSubtree(getTarget(), new OID(sOid));
|
||||||
|
return events;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getInterfaceList(){
|
||||||
|
ArrayList<String> retStr = new ArrayList<String>();
|
||||||
|
|
||||||
|
List<TreeEvent> events = getTree("1.3.6.1.2.1.2.2.1.2");
|
||||||
|
|
||||||
|
if(events != null || events.size() != 0) {
|
||||||
|
for (TreeEvent event : events) {
|
||||||
|
if (event.isError()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
VariableBinding[] varBindings = event.getVariableBindings();
|
||||||
|
if (varBindings == null || varBindings.length == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (VariableBinding varBinding : varBindings) {
|
||||||
|
if (varBinding == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
retStr.add(varBinding.getVariable().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retStr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue