0

当我想在 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,这导致在代理上发送陷阱失败或请求的引擎 ID 不能在 NMS 上进行匹配。

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

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

4

2 回答 2

0

好的,让我们看看。

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

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

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

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

  • 您的应用程序将获得一个引擎 ID。
  • NMS 使用您在应用程序中定义的引擎 ID 创建一个用户。
    • 我建议使引擎 id 可配置,以便可以轻松更改它而无需重新编译整个项目。
  • 您的应用程序向 NMS 发送一个陷阱,它将验证身份验证、加密和引擎 ID 是否与 NMS 上的用户匹配。
  • Trap 在 NMS 上处理
于 2018-10-31T07:15:12.560 回答
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

于 2020-11-11T12:56:13.287 回答