SNMP4J - 无法为带有 SHA/AES 256 的 SNMP V3 制作 运行
SNMP4J - unable to make it run for SNMP V3 with SHA / AES 256
我使用 SNMP4J(版本 2.5.3)在 SNMP V3 中配置的目标上启动 SNMP 查询。它适用于除隐私 AES 256 协议之外的所有 auth/priv 协议组合!我只能得到一个空响应。
这是代码:
public static void main(String[] args) throws Exception
{
String targetAddress = "udp:10.2.1.41/161";
String userName = "mip_aes256";
OID authProtocol = AuthSHA.ID;
String authPassphrase = "mip_user_AuthPassword";
OID privProtocol = PrivAES256.ID;
String privPassphrase = "mip_user_PrivPassword";
// build a PDU with all the OIDs
ScopedPDU requestPDU = new ScopedPDU();
requestPDU.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0")));
requestPDU.setType(PDU.GET);
UserTarget target = new UserTarget();
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
target.setAddress(GenericAddress.parse(targetAddress));
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(new OctetString(userName));
TransportMapping<UdpAddress> transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
// add user to the USM
snmp.getUSM().addUser(new OctetString(userName),
new UsmUser(new OctetString(userName),
authProtocol,
new OctetString(authPassphrase),
privProtocol,
new OctetString(privPassphrase)));
transport.listen();
ResponseEvent re = snmp.send(requestPDU, target);
PDU responsePDU = re.getResponse();
if (responsePDU == null)
{
System.out.println("responsePDU == null :");
System.out.println("> Error : " + re.getError());
System.out.println("> Address : " + re.getPeerAddress());
System.out.println("> Source : " + re.getSource());
System.out.println("> User object : " + re.getUserObject());
}
else if (responsePDU.getVariableBindings() != null)
{
for (VariableBinding vb : responsePDU.getVariableBindings())
{
System.out.println(vb.getOid() + " --> " + vb.getVariable());
}
}
}
我很确定路由器配置没问题(Cisco 路由器上的网络提供商配置)。我的 Java 8 安装(在 Ubuntu 64 上)包括 Java 加密扩展以获得无限强度。
你对这个问题有什么想法吗?
感谢您的帮助,
此致
西尔万
SNMPv3 AES 256 是 non-standard。 snmpv3 aes 256 的 google 将对此进行详细说明。
根据我们的经验,并非所有实现都可以互操作。
这就是标准化的目的。
我发现了一项更改,使其适用于 Cisco 2900。
OID privProtocol = PrivAES256With3DESKeyExtension.ID;
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256With3DESKeyExtension());
希望对大家有所帮助!
我使用 SNMP4J(版本 2.5.3)在 SNMP V3 中配置的目标上启动 SNMP 查询。它适用于除隐私 AES 256 协议之外的所有 auth/priv 协议组合!我只能得到一个空响应。
这是代码:
public static void main(String[] args) throws Exception
{
String targetAddress = "udp:10.2.1.41/161";
String userName = "mip_aes256";
OID authProtocol = AuthSHA.ID;
String authPassphrase = "mip_user_AuthPassword";
OID privProtocol = PrivAES256.ID;
String privPassphrase = "mip_user_PrivPassword";
// build a PDU with all the OIDs
ScopedPDU requestPDU = new ScopedPDU();
requestPDU.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0")));
requestPDU.setType(PDU.GET);
UserTarget target = new UserTarget();
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
target.setAddress(GenericAddress.parse(targetAddress));
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(new OctetString(userName));
TransportMapping<UdpAddress> transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
// add user to the USM
snmp.getUSM().addUser(new OctetString(userName),
new UsmUser(new OctetString(userName),
authProtocol,
new OctetString(authPassphrase),
privProtocol,
new OctetString(privPassphrase)));
transport.listen();
ResponseEvent re = snmp.send(requestPDU, target);
PDU responsePDU = re.getResponse();
if (responsePDU == null)
{
System.out.println("responsePDU == null :");
System.out.println("> Error : " + re.getError());
System.out.println("> Address : " + re.getPeerAddress());
System.out.println("> Source : " + re.getSource());
System.out.println("> User object : " + re.getUserObject());
}
else if (responsePDU.getVariableBindings() != null)
{
for (VariableBinding vb : responsePDU.getVariableBindings())
{
System.out.println(vb.getOid() + " --> " + vb.getVariable());
}
}
}
我很确定路由器配置没问题(Cisco 路由器上的网络提供商配置)。我的 Java 8 安装(在 Ubuntu 64 上)包括 Java 加密扩展以获得无限强度。 你对这个问题有什么想法吗?
感谢您的帮助,
此致 西尔万
SNMPv3 AES 256 是 non-standard。 snmpv3 aes 256 的 google 将对此进行详细说明。 根据我们的经验,并非所有实现都可以互操作。 这就是标准化的目的。
我发现了一项更改,使其适用于 Cisco 2900。
OID privProtocol = PrivAES256With3DESKeyExtension.ID;
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256With3DESKeyExtension());
希望对大家有所帮助!