我需要在java中用snmp4j模拟一个GETBULK请求。但我不明白该怎么做。更具体我不明白如何创建TreeEvent来创建响应列表以及如何回答客户端。
我是这样的snmpwalk
public void sendWalk(String community, String ipAddress, int port, String oidValue, int retries, long timeoutMillis) throws IOException {
CommunityTarget comtarget = new CommunityTarget();
comtarget.setCommunity(new OctetString(community));
comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));
comtarget.setRetries(retries);
comtarget.setTimeout(timeoutMillis);
comtarget.setVersion(snmpVersion);
OID oid = new OID(oidValue);
TreeUtils treeUtils = new TreeUtils(snmp, new DefaultPDUFactory());
List<TreeEvent> events = treeUtils.walk(comtarget, new OID[]{oid});
if(events == null || events.size() == 0) {
// TODO inserire in allarm manager ???
log.warn(" No events . Request[Oid:"+oidValue+"]");
}else{
parseWalkResult(events);
}
}
对SNMP4J进行snmpwalk是一个GETBULK请求,然后我想在treeUtils.walk方法中实现一个模拟响应,并将Treeofvent列表作为模型的答案。
提前谢谢。
答案 0 :(得分:0)
您可以使用SNMP4j在路由器上执行SNMPBULKWALK。 SNMP4j提供以下API以同步检索给定根节点的整个子树。
类:TreeUtils.java方法:getSubtree(targetV2,rootOID);
它还提供了另一种异步方法。
类:TreeUtils.java方法:walk(targetV2,rootOIDs);
我有一个github项目,它有完整的工作代码。您可以克隆github repo并尝试一下。