J'utilise SNMP4J (version 2.5.3) pour lancer des requêtes SNMP sur une cible configurée dans SNMP V3. Cela fonctionne bien pour toutes les combinaisons de protocoles auth/priv sauf pour le protocole de confidentialité AES 256! Je peux seulement obtenir une réponse nulle.SNMP4J - impossible de le faire fonctionner pour SNMP V3 avec SHA/AES 256
Voici le code:
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());
}
}
}
Je suis assez sûr que la configuration du routeur est très bien (config fournisseur réseau sur le routeur Cisco). Mon installation de Java 8 (sur Ubuntu 64) inclut l'extension Java Cryptography pour une force illimitée. Avez-vous une idée de ce problème?
Merci pour votre aide,
Cordialement Sylvain
merci pour votre réponse. Ok, je comprends AES 256 est non standard mais si SNMP4J le supporte, qu'est-ce que cela signifie? Supportera-t-il seulement quelques implémentations? Laquelle ? – mnementh64
Ils ont implémenté QUELQUE CHOSE. Quelqu'un d'autre (le fournisseur de votre appareil) a implémenté SOMETHING else. Comme il n'est pas standard, il n'est pas passé par le processus rigoureux pour s'assurer que tout le monde est d'accord sur ce qu'est quelque chose. –
Il est donc très difficile d'implémenter un tel appelant SNMP. Je dois considérer un code dédié à chaque appareil? Et d'abord, je dois obtenir les paramètres de mise en œuvre du fournisseur de l'appareil. Comment trouver ça ?? Comment une entreprise pourrait-elle annoncer un support AES 256 de son produit? – mnementh64