我正在编写一个程序,该程序应该从本地路由器的白名单读取和写入 MAC 地址。
我已经设法读取了这个所谓的“wlanACLTable”的当前表内容,但我无法使用 SNMP 向该表添加另一行。
我搜索了示例,但所有示例都是标量值。
我要联系的设备是路由器,一台 Teldat 的 W2002
要添加行,您需要将数据写入表中的新行。要使用的 OID 是 Table OID+ 列 + IP + IfIndex(您要配置的网络 ID)+ 行
例如:1.3.6.1.4.1.272.4.46.8.1 +“.1”+“.255.255.255.255.255.255”+“.200000”+“.1337”
表:第 1 列:MAC(格式:6 个数字 0-255)第 2 列:IfIndex(整数第 3 列:状态行(启用 1,禁用 2,删除 3)将其写入单个 PDU,就像
pdu.addAll(new VariableBinding[]{new VariableBinding(new OID(Table_OID + ".1"+"."+stringMac +"."+IfIndex+"." + freeRow),mac),
new VariableBinding(new OID(Table_OID + ".2"+"."+stringMac +"."+IfIndex+"." + freeRow),new Integer32(IfIndex)),
new VariableBinding(new OID(Table_OID + ".3"+"."+stringMac +"."+IfIndex+"." + freeRow),new Integer32(1))});
最后,写入数据:使用低级别的 Set 请求发送它们,在本例中为 SNMP V3:
private Snmp snmp;
public boolean executeSetRequest(String AccessName, String AccessPassword, ScopedPDU pdu) throws IOException {
snmp.getUSM().addUser(new OctetString(AccessName), new UsmUser(new OctetString(AccessName), AuthMD5.ID, new OctetString(AccessPassword), PrivDES.ID, new OctetString(AccessPassword)));
pdu.setType(ScopedPDU.SET);
ResponseEvent response = snmp.send(pdu, getUserTarget(AccessName));
if (response == null)
throw new RuntimeException("SET timed out");
return true;
}