我在运行SNMP管理器和同时运行接收器的应用程序中使用SNMP4j 1.11.3。在Java进程启动的情况下,V3陷阱接收器正在正常加载配置中的所有v3用户,但是一旦SNMP v3管理器开始向设备发出get / set请求,陷阱接收器就会停止接收陷阱并说“RFC3414§3.2。 4未知安全名称“当它尝试解密v3陷阱时。
由于snmp4j似乎正在使用单一的SecurityModels来保存USM用户集合,因此当管理器创建新的snmp会话并且addusmuser时它正在清除陷阱USM用户,这就是陷阱接收器无法处理的原因陷阱。
SNMP管理器请求代码的初始化如下
android.permission.AUTHENTICATE_ACCOUNTS
我怎么能避免这个问题,我错过了什么?
FYI Manager和Receiver在不同的线程上运行。
干杯, 雷迪。
答案 0 :(得分:1)
现在更改为以下代码后,管理器的每个SNMP请求都将拥有自己的USM usertable,陷阱接收器正常工作。 Culprit将在Global SecuirtyModels Singleton USM上添加新的安全模型。
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
USM usm = new USM(SecurityProtocols.getInstance(),
localEngineID,
engineBootCount);
usm.addUser(securityName, new UsmUser(securityName,
authProtocol,
authPassphrase,
privProtocol,
privPassphrase));
MessageProcessingModel oldModel = snmp.getMessageDispatcher().getMessageProcessingModel(MessageProcessingModel.MPv3);
if (oldModel != null) {
snmp.getMessageDispatcher().removeMessageProcessingModel(oldModel);
}
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm));
答案 1 :(得分:-1)
我遇到了同样的问题。并且上述方法是有效的。 SecurityModels是单例,常量用作HashTable的键,导致并发问题。