net-snmp - 如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?
问题描述
我正在使用 snmp4j 2.8.4 和 Java 1.8
当我使用命令行发送陷阱时它可以工作。例如
snmptrapd.conf
authCommunity log,execute,net public
createUser -e 0x8000000001020304 myuser MD5 mypassword DES mypassword1
authUser log,execute,net myuser noauth
命令是
snmptrap -e 0x8000000001020304 -v 3 -u myuser -a MD5 -A myjjpassword -x DES -X myjjpassword1 -l noAuthNoPriv 192.168.135.18:162 "" 1.3.6.1.4.1.48183 1.3.6.1.4.1.48183.1 s "smartmon"
此时可以了,但是我使用SNMP4J的时候,不知道是不是我的engine ID设置不正确,导致trap失败或者其他什么原因
USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
SecurityModels.getInstance().addSecurityModel(usm);
usm.updateUser(new UsmUserEntry(new OctetString("myuser"),
new OctetString("0x8000000001020304".getBytes()), new UsmUser(new OctetString("myuser"),
null,
null,
null,
null)));
snmp = new Snmp(transport);
snmp.setLocalEngine(new OctetString("0x8000000001020304".getBytes()).getValue(),0,0);
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm));
transport.listen();
你能告诉我我在哪里设置有问题吗?我应该如何设置引擎ID?非常感谢你的回答
解决方案
OctetString 使用与 NET-SNMP 不同的字符串表示形式。因此,您需要将引擎 ID 指定为:
OctetString.fromString("8000000001020304", 16);
推荐阅读
- php - 如何显示来自 mySQL 的正确数据?
- javascript - For循环内函数,数组枚举
- google-api-client - 为 iOS 的 Google API 客户端库设置捆绑 ID
- ios - 独立视图和容器视图有什么区别?
- xamarin - Azure CosmosDb DocumentQuery 将 HasMoreResults 返回为 true,但 ExecuteNextASync 返回 0 个计数
- php - 多维数组错误 - 未识别的索引
- .net - 使用 Angular 和 .Net Core 将下拉值发送到后端
- android - Room:无法访问主线程上的数据库,因为它可能会长时间锁定 UI
- android-studio - 在 Android Studio 上以本机方式构建 OpenCV 时出现 cmake 错误
- angular - 如何在原始 html 中使用 Angular 5 组件