Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 管理器已清除SNMP v3陷阱用户_Java_Snmp4j - Fatal编程技术网

Java 管理器已清除SNMP v3陷阱用户

Java 管理器已清除SNMP v3陷阱用户,java,snmp4j,Java,Snmp4j,我在一个同时运行SNMP管理器和接收器的应用程序中使用SNMP4j 1.11.3。在这种情况下,当Java进程启动时,V3陷阱接收器工作正常,从配置加载所有V3用户,但一旦SNMP V3管理器开始向设备发出get/set请求,陷阱接收器将停止接收陷阱,并在尝试解密V3陷阱时说“RFC3414§3.2.4未知安全名称” 由于snmp4j似乎在使用一个单一安全模型,它在其中保存USM用户集合,因此当manager创建一个新的snmp会话并添加USMUSER时,它正在清除陷阱USM用户,这就是陷阱接收

我在一个同时运行SNMP管理器和接收器的应用程序中使用SNMP4j 1.11.3。在这种情况下,当Java进程启动时,V3陷阱接收器工作正常,从配置加载所有V3用户,但一旦SNMP V3管理器开始向设备发出get/set请求,陷阱接收器将停止接收陷阱,并在尝试解密V3陷阱时说“RFC3414§3.2.4未知安全名称”

由于snmp4j似乎在使用一个单一安全模型,它在其中保存USM用户集合,因此当manager创建一个新的snmp会话并添加USMUSER时,它正在清除陷阱USM用户,这就是陷阱接收器无法处理陷阱的原因

SNMP管理器请求代码的初始化如下所示

Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
USM usm = new USM(SecurityProtocols.getInstance(),
                    new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
snmp.getUSM().addUser(securityName, new UsmUser(securityName,
                                                    authProtocol,
                                                    authPassphrase,
                                                    privProtocol,
                                                    privPassphrase));
我怎样才能避免这个问题,我错过了什么

FYI管理器和接收器在不同线程上运行

干杯,
Reddy.

更改为以下代码后,现在管理器将为每个SNMP请求提供自己的USM usertable,陷阱接收器工作正常。罪魁祸首是在全球安全模型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));   

我也有同样的问题。上述方法是有效的。SecurityModels是单例的,并且使用常量作为哈希表的键,这导致了并发问题