package org.infosec.ismp.collectd.services;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.infosec.ismp.collectd.snmp.ObjIdMonitor;
import org.infosec.ismp.collectd.snmp.tracker.TableTracker;
import org.infosec.ismp.snmp.ColumnTracker;
import org.infosec.ismp.snmp.SnmpAgentConfig;
import org.infosec.ismp.snmp.SnmpInstId;
import org.infosec.ismp.snmp.SnmpObjId;
import org.infosec.ismp.snmp.SnmpResult;
import org.infosec.ismp.snmp.SnmpUtils;
import org.infosec.ismp.snmp.SnmpValue;
import org.infosec.ismp.snmp.SnmpWalker;
import org.snmp4j.smi.SMIConstants;
public class SnmpGetter {
private SnmpAgentConfig m_agentConfig;
public SnmpGetter(SnmpAgentConfig agentConfig) {
this.m_agentConfig = agentConfig;
}
/**
* 返回一个字符串,是标量
*
* @param oid
* @return
*/
public String getSnmpString(String oid) {
ObjIdMonitor tracker = new ObjIdMonitor(SnmpObjId.get(oid),
SnmpInstId.INST_ZERO);
SnmpWalker walker = SnmpUtils.createWalker(m_agentConfig,
"singSnmpGet", tracker);
walker.start();
try {
walker.waitFor(60 * 1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!tracker.failed()) {
SnmpValue value = tracker.getValue();
if (value != null) {
if (value.getType() == SMIConstants.SYNTAX_OCTET_STRING) {
return value.toHexString();
} else {
return value.toDisplayString();
}
}
}
return null;
}
/**
* 返回表中一列
* @param oid
* @return
*/
public String[] getSnmpArray(String oid) {
final List<SnmpValue> results = new ArrayList<SnmpValue>();
ColumnTracker tracker = new ColumnTracker(SnmpObjId.get(oid)) {
@Override
protected void storeResult(SnmpResult res) {
results.add(res.getValue());
}
};
SnmpWalker walker = SnmpUtils.createWalker(m_agentConfig,
"singSnmpGet", tracker);
walker.start();
try {
walker.waitFor(60 * 1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!tracker.failed()) {
List<String> resultString = new ArrayList<String>();
if(results!=null){
for (SnmpValue value : results) {
if (value.getType() == SMIConstants.SYNTAX_OCTET_STRING) {
resultString.add(value.toHexString());
} else {
resultString.add(value.toDisplayString());
}
}
}
return resultString.toArray(new String[0]);
}
return null;
}
public String[][] getSnmpTable(String tableOid){
TableTracker tracker = new TableTracker(SnmpObjId.get(tableOid));
SnmpWalker walker = SnmpUtils.createWalker(m_agentConfig,
"singSnmpGet", tracker);
walker.start();
try {
walker.waitFor(60 * 1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!tracker.failed()) {
return tracker.getTable();
}
return null;
}
public static void main(String[] args) throws Exception {
SnmpAgentConfig config = new SnmpAgentConfig();
config.setAddress(InetAddress.getByName("192.168.9.254"));
config.setReadCommunity("public");
config.setVersion(2);
// final List<SnmpValue> results = new ArrayList<SnmpValue>();
// ColumnTracker tracker = new ColumnTracker(
// SnmpObjId.get(".1.3.6.1.2.1.3.1")) {
//
// @Override
// protected void storeResult(SnmpResult res) {
// System.out.println(res.getAbsoluteInstance());
// results.add(res.getValue());
// }
//
// };
TableTracker tracker = new TableTracker(SnmpObjId.get(".1.3.6.1.2.1.6.13"));
SnmpWalker walker = SnmpUtils.createWalker(config, "tableSnmpGet",
tracker);
walker.start();
try {
walker.waitFor(60 * 1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!tracker.failed()) {
System.out.println("sucessed");
System.out.println(tracker.getItemCount());
System.out.println(tracker.getColumnCount());
tracker.printTable();
}
}
}