如何为SNMP4J设置指定的引擎ID以发送V3陷阱

时间:2018-10-31 06:51:26

标签: net-snmp snmp4j snmp-trap

当我想在NMS上创建SNMPv3用户时,需要输入引擎ID ,这是来自SNMP代理服务器的每个用户的标识符字符串,因此我输入了一个临时ID。 例如:

createUser -e "0x80001370017f000101" "mytrapuser1" SHA "user1authpass" AES "user1encypass"
authUser log,execute,net mytrapuser1

我可以使用以下命令将陷阱从代理服务器成功发送到NMS:

snmptrap -v 3 -a SHA -A user1authpass -x AES -X user1encypass -l authPriv -u mytrapuser1 -e 0x80001370017f000101 {NMS-server-ip} 39 12.0.4.0

现在,一切看起来都很好。

但是当我想使用Java SNMP4j在代理服务器上与创建的用户mytrapuser1发送陷阱时,我不知道如何将请求的引擎ID指定为0x80001370017f000101,这导致陷阱在代理或请求的上发送失败NMS上无法匹配引擎ID。

我的问题:
 1.是否应为SNMP4j设置一个指定的引擎ID以发送陷阱?
 2.如果不是#1,如何提前获取代理服务器的引擎ID,然后可以使用它在NMS服务器上创建用户?
 3.如果我理解有什么错误或使用错误?

有没有人可以帮助我,非常感谢。

2 个答案:

答案 0 :(得分:0)

好的,让我们看看。

我如何看到它的设置如下:

应用程序创建一个引擎ID,用于发送陷阱。该引擎ID与应用程序相对应,并且可以用作您的应用程序的标识符。

因此,为了回答问题1,我相信您确实应该设置特定的引擎ID。 这也回答了问题2。

对于工作流程,我相信它是这样的:

  • 为您的应用程序提供了引擎ID。
  • NMS使用您在应用程序中定义的引擎ID创建一个用户。
    • 我建议使引擎id可配置,以便可以轻松更改它,而不必重新编译整个项目。
  • 您的应用程序向NMS发送陷阱,该陷阱将验证身份验证,加密和引擎ID与NMS上的用户匹配。
  • 陷阱在NMS上处理

答案 1 :(得分:0)

OctetString与NET-SNMP使用不同的字符串表示形式。因此,您需要按如下所示指定引擎ID

OctetString.fromString("8000000001020304", 16)

所以您基本上应该做两件事


snmp.getUSM().addUser(
                    new OctetString("username"),
                    OctetString.fromString("8000000001020304", 16),
                    new UsmUser(new OctetString("secname"), AuthSHA.ID, new OctetString("authphrase"),
                            PrivAES128.ID, new OctetString("privphrase"))
);




snmp.setLocalEngine(OctetString.fromString("8000000001020304", 16).getValue(), 0, 0);

您的snmptrapd.conf应该看起来像这样

createUser -e 0x8000000001020304 username SHA authphrase AES privphrase

authUser log,execute,net username


snmpTrapdAddr udp:1166

相关问题