如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?

Posted

技术标签:

【中文标题】如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?【英文标题】:How to configure engine ID to send SNMP trap V3 using SNMP4J? 【发布时间】:2020-08-11 10:58:54 【问题描述】:

我正在使用 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的时候,不知道是不是我的引擎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?非常感谢您的回答

【问题讨论】:

【参考方案1】:

OctetString 使用与 NET-SNMP 不同的字符串表示。因此,您需要将引擎 ID 指定为:

OctetString.fromString("8000000001020304", 16);

【讨论】:

以上是关于如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?的主要内容,如果未能解决你的问题,请参考以下文章

SNMP4J源码主要类解析

SNMP4J与ObjectSNMP对比分析之我见

java-snmp4j之snmp

需要支持:SNMP 陷阱发送器 (SNMPv3)

java如何在传输文件时显示传输速度,比如:100kb/s。一点头绪都没有,请大家帮帮看看吧,越详细越好。

snmp v3 中的权威引擎 ID 和上下文引擎 ID