经理清除SNMP v3陷阱用户

时间:2015-06-02 03:07:09

标签: java snmp4j

我在运行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在不同的线程上运行。

干杯, 雷迪。

2 个答案:

答案 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的键,导致并发问题。