Java 具有身份验证/隐私的SnmpV3陷阱接收器-从代理动态获取engineID
我正在尝试使用WebNms AdventNet API开发一个Java 具有身份验证/隐私的SnmpV3陷阱接收器-从代理动态获取engineID,java,snmp,Java,Snmp,我正在尝试使用WebNms AdventNet API开发一个SNMPv3陷阱接收器。 如果我使用身份验证和隐私选项(MD5+DES),我需要知道发送陷阱的代理的engineID 以解密陷阱内容。如何动态获取此engineID(在应用程序中不进行硬编码)? 但是为了让它工作,我需要提供代理在发送陷阱时使用的端口(代理是一个使用随机源端口的真实网络元素) 下面的代码正在工作,但我硬编码了engineID。 是否有其他方法可以在不硬编码engineID的情况下解密陷阱 public class D
SNMPv3
陷阱接收器。
如果我使用身份验证和隐私选项(MD5+DES
),我需要知道发送陷阱的代理的engineID
以解密陷阱内容。如何动态获取此engineID
(在应用程序中不进行硬编码)?
但是为了让它工作,我需要提供代理在发送陷阱时使用的端口(代理是一个使用随机源端口的真实网络元素)
下面的代码正在工作,但我硬编码了engineID
。
是否有其他方法可以在不硬编码engineID
的情况下解密陷阱
public class DragosApp2 implements SnmpClient{
public static void main(String[] args) throws SnmpException {
SnmpAPI api = new SnmpAPI();
SnmpEngineEntry snmpEntry = new SnmpEngineEntry("10.10.66.79");
SnmpEngineTable engineTable = api.getSnmpEngine();
engineTable.addEntry(snmpEntry);
SnmpSession session = new SnmpSession(api);
session.addSnmpClient(new DragosApp2());
UDPProtocolOptions ses_opt = new UDPProtocolOptions();
ses_opt.setLocalPort(162);
session.setProtocolOptions(ses_opt);
session.open();
byte[] engineID = gethexValue("0x80001f888026f9036957333c81"); // HOW can I replace this part??
USMUserEntry user = new USMUserEntry(new String("dragos3").getBytes(), engineID);
user.setAuthProtocol(USMUserEntry.MD5_AUTH);
user.setPrivProtocol(USMUserEntry.CBC_DES);
byte[] authKey = USMUtils.password_to_key(USMUserEntry.MD5_AUTH,
new String("12345678").getBytes(),
new String("12345678").getBytes().length,
engineID);
byte[] privKey = USMUtils.password_to_key(USMUserEntry.MD5_AUTH,
new String("12345678").getBytes(),
new String("12345678").getBytes().length,
engineID,
USMUserEntry.CBC_DES);
user.setAuthPassword(new String("12345678").getBytes());
user.setPrivPassword(new String("12345678").getBytes());
user.setAuthKey(authKey);
user.setPrivKey(privKey);
user.setSecurityLevel((byte)3);
user.setEngineEntry(snmpEntry);
USMUserTable uut = (USMUserTable)api.getSecurityProvider().getTable(3);
uut.addEntry(user);
}
}