gpt4 book ai didi

java - 带有社区字符串索引的 snmp4j snmpwalk

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:27:56 26 4
gpt4 key购买 nike

如何使用 snmp4j 和社区字符串索引进行 snmpwalk?

我可以通过像 public@123 这样更改社区字符串来进行社区字符串索引(123是vlanId)

但这只适用于 snmpget !!??:

public ResponseEvent get(OID oids) throws IOException {
PDU pdu = new PDU();
pdu.add(new VariableBinding(oid));
pdu.setType(PDU.GETNEXT);
ResponseEvent event = snmp.send(pdu, getTarget(), null);
}

private Target getTarget() {
Address targetAddress = GenericAddress.parse(sw.getAddress());
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(communityString));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
return target;
}

但是当我尝试像这样执行 snmpwalk 时,我会超时

public HashMap<String, String> snmpWalk(String strOid) throws IOException {
OID oid = new OID(strOid);
TreeUtils treeUtils = new TreeUtils(snmp, new DefaultPDUFactory());
HashMap<String, String> snmpResult = new HashMap<String, String>();
List<TreeEvent> events = treeUtils.getSubtree(getTarget(), oid);
// some more code ...
}

最佳答案

我通过使用 GETBULK 编写 SNMP-walk 方法解决了这个问题

设置 maxRepetitions 和 maxSizeResponsePDU 很重要我使用这个值:

/** maxRepetitions needs to be set for BULKGET to work<br>
* it defines the maximum lines/results returned for one request.
*/
private int maxRepetitions = 50;

/** maxSizeResponsePDU needs to be set for BULKGET to work */
private int maxSizeResponsePDU = 65535;

public HashMap<String, String> snmpWalk (String startOid) throws IOException{
//String startOid = "1.3.6.1.4.1.9.9.46.1.3.1.1.4.1";
String oid = startOid;
HashMap<String, String> varBindings = new HashMap<String, String>();

while (oid.startsWith(startOid)) {
PDU pdu = getVariableBinding(new OID(oid), PDU.GETBULK);
if (pdu == null || pdu.size() == 0) return varBindings;

for (int i=0; i<pdu.size(); i++) {
VariableBinding var = pdu.get(i);
if (var == null) return varBindings;

oid = var.getOid().toString();
if (oid.startsWith(startOid)) {
varBindings.put(oid, var.getVariable().toString());
} else {
return varBindings;
}
}
}
return varBindings;
}

/**
* Method which takes a single OID and returns the response from the agent
* as a String.
*
* @param oid
* @return
* @throws IOException
*/
public PDU getVariableBinding(OID oid, int type) throws IOException {
ResponseEvent event = get(new OID[] { oid }, type);

if (event == null || event.getResponse() == null) {
warn(oid);
return null;
}

return event.getResponse();
}

public ResponseEvent get(OID oids[], int type) throws IOException {
PDU pdu = new PDU();
for (OID oid : oids) {
pdu.add(new VariableBinding(oid));
}
pdu.setType(type);

pdu.setMaxRepetitions(maxRepetitions); // This makes GETBULK work as expected

ResponseEvent event = snmp.send(pdu, getTarget(), null);
if (event != null) {
return event;
}
throw new RuntimeException("GET timed out");
}

private Target getTarget() {
Address targetAddress = GenericAddress.parse(sw.getAddress());
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(communityString));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(3000);
target.setVersion(SnmpConstants.version2c);

target.setMaxSizeRequestPDU(maxSizeResponsePDU); // This makes GETBULK work as expected

return target;
}

关于java - 带有社区字符串索引的 snmp4j snmpwalk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com