我需要在Java中使用snmp4j模拟GETBULK请求。但是我不知道该怎么做。更具体地说,我不明白如何创建TreeEvent来创建响应列表以及如何回答客户端。
我有这样的走走
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方法上实现对响应的模拟,并让TreeEvents列表作为模型的答案。
先感谢您。
最佳答案
您可以使用SNMP4j在路由器上执行SNMPBULKWALK。 SNMP4j提供以下API来同步检索给定根节点的整个子树。
类:TreeUtils.java方法:getSubtree(targetV2,rootOID);
它还提供了另一种异步方法。
类:TreeUtils.java方法:walk(targetV2,rootOIDs);
我有一个具有完整工作代码的github项目。您可以克隆github repo并尝试。