当我想在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.如果我理解有什么错误或使用错误?
有没有人可以帮助我,非常感谢。
答案 0 :(得分:0)
好的,让我们看看。
我如何看到它的设置如下:
应用程序创建一个引擎ID,用于发送陷阱。该引擎ID与应用程序相对应,并且可以用作您的应用程序的标识符。
因此,为了回答问题1,我相信您确实应该设置特定的引擎ID。 这也回答了问题2。
对于工作流程,我相信它是这样的:
答案 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