我需要在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并尝试。

09-29 19:43