PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → SNMP V3
SNMP V3
Débuté par Patrice, 09 nov. 2021 20:58 - 6 réponses
Posté le 09 novembre 2021 - 20:58
Bonjour,

Sur ce que j'ai compris, on peut faire tout au pus du snmpv1 avec windev, est-ce que quelqu'un sait si en theorie ce serait possible avec socketcrée de faire du snmpv3 ? ou si il y a plus simple ?

Si c'est par socketconnect, il faut respecter les standart de cryptage specifique a snmpv3 et donc est-ce que windev connait ces algorithme de cryptage de base ?

Ou peut-etre en utilisant un .net ?

Une piste ?
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 12 novembre 2021 - 13:03
hello,
pour du SNMP V3 on peut utiliser l'assemblage dotnet sharpsnmplib disponible ici :
https://www.nuget.org/packages/Lextm.SharpSnmpLib/
1 - Télécharger le paquet nupkg (Download package)
2 - Ouvrir le fichier nupkg avec 7zip
3 - Extraire le fichier lib/net471/SharpSnmpLib.dll
4 - importer l'assemblage dotnet SharpSnmpLib.dll dans son projet.
Voici un exemple de code pour faire un snmpGet v1 et un snmpGet v3 avec cet assemblage dans Windev :
// J.P Novembre 2021 test Assemblage SharpSnmpLib en SNMP V1 er V3
QUAND EXCEPTIONEXCEPTION DANS
cible est un IPEndPoint( "System.Net".IpAddress.Parse("127.0.0.1"),1161)
maListeVariable est une "List<Variable>"
monOid est un ObjectIdentifier("1.3.6.1.2.1.1.1.0")
maVariable est une "Lextm.SharpSnmpLib".Variable(monOid)
maListeVariable.Add(maVariable)
varia est une "Lextm.SharpSnmpLib".Variable dynamique
monRes est une "List<Variable>" dynamique
community est un "Lextm.SharpSnmpLib".OctetString("public")
monRes = Messenger.Get(VersionCode.V1, cible,community,maListeVariable,6000)
POUR TOUT varia de monRes
Trace(varia.ToString())
FIN
// SNMP V3
discovery est un Discovery dynamique = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu)
report est un ReportMessage dynamique = discovery.GetResponse(6000, cible)
securityname est un "Lextm.SharpSnmpLib".OctetString("simulator")
authpwd est un "Lextm.SharpSnmpLib".OctetString("auctoritas")
privpwd est un "Lextm.SharpSnmpLib".OctetString("privatus")
// monctxName est un "Lextm.SharpSnmpLib".OctetString("solaris-system")
auth est un MD5AuthenticationProvider(authpwd)
priv est un DESPrivacyProvider(privpwd, auth)
myRequest est un GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, ...
Messenger.NextRequestId,securityname, ...
maListeVariable, priv, Messenger.MaxMessageSize, report)
// requête avec contexteName
// myRequest est un GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, ...
// Messenger.NextRequestId,securityname,monctxName, ...
// maListeVariable, priv, Messenger.MaxMessageSize, report)

reply est un ISnmpMessage dynamique = SnmpMessageExtension.GetResponse(myRequest,6000, cible)
pduReply est un ISnmpPdu dynamique = SnmpMessageExtension.Pdu(reply)
SI pduReply.ErrorStatus.ToInt32() <> 0 ALORS
Erreur("Erreur dans la réponse SNMP V3")
SINON
POUR TOUT varia de SnmpMessageExtension.Variables(reply)
Trace(varia.ToString())
FIN
FIN

FAIRE
Erreur(ExceptionInfo())
FIN

La cible est un simulateur SNMP V1 V2 V3 écrit en python snmpsim qui peut simuler plusieurs cibles en même temps.
python snmpsimd.py --data-dir=../snmpsim/data --agent-udpv4-endpoint=127.0.0.1:1161
 --- SNMPv3 USM configuration
  SNMPv3 USM SecurityName: simulator
  SNMPv3 USM authentication key: auctoritas, authentication protocol: MD5
  SNMPv3 USM encryption (privacy) key: privatus, encryption protocol: DES
  Maximum number of variable bindings in SNMP response: 64
  --- Transport configuration
  Listening at UDP/IPv4 endpoint 127.0.0.1:1161, transport ID 1.3.6.1.6.1.1.0


et voici les réponses que j'obtiens aux requêtes SNMP v1 et V3 lancées dans Windev :
Variable: Id: 1.3.6.1.2.1.1.1.0; Data: Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686
Variable: Id: 1.3.6.1.2.1.1.1.0; Data: ProCurve J9021A Switch 2810-24G, revision N.11.75, ROM N.10.01 (/sw/code/build/bass)


--
Ami calmant, J.P
Posté le 14 novembre 2021 - 09:33
Merci beaucoup, cela va beaucoup m'aider.

J'ai une autre question, sur les mib, j'ai l'impression que windev est capable de lire que les mib pour la v1 , mais c'est pas précisé... est-ce que tu aurais l'info ? Je suis sur les fichier MIB du constructeur watchguard et il semble pas pouvoir les exploiter, ou je m'y prend pas bien (mais ca fonctionne avec d'autre mibv1)
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 15 novembre 2021 - 07:38
hello,
avec quelle MIB de watchguard as-tu des problèmes ?
avec ce code :
MIBChargé est un booléen
CheminMIBs est une chaîne = "d:\temp\mibs\"
Mib est une chaîne
Mib = "WATCHGUARD-MIB.mib" // MIB
MIBChargé = SNMPChargeMIB(CheminMIBs + Mib)
SI MIBChargé = Faux ALORS
Erreur("Erreur MIB :" + ErreurInfo())
SINON
Trace(SNMPOIDVersChaîne("1.3.6.1.4.1.3097.1.4.6"))
FIN


j'obtiens :
iso.org.dod.internet.private.enterprises.watchguard.wgProducts.fbXSeries.fbX1000


--
Ami calmant, J.P
Posté le 29 avril 2024 - 14:13
Re,

j'ai mis que 3 ans a répondre :D

En fait il y a un bug sur les import de mib avec les fonction windev , et je pense que c'est pour ca qu'on pas récupérer le type de l'oid. Dans ton exemple, on peu aussi s'appuyer sur les MIB et pouvoir voir le type de la variable ?
Posté le 10 mai 2024 - 10:29
Bonjour,

J'ai réessayer le code et ca fonctionne pas, je n'ai pas l'habitude des import de .net , du coup je comprens pas trop comment interpréter ce qu'il attend
maListeVariable est une "List<Variable>" -> il manque quelque chose, il me souligne en rouge le terme
maVariable est une "Lextm.SharpSnmpLib".Variable((monOid)) -> mauvais parametre pour le constructeur
et dans la doc si ct en .net ce serait : new List<Variable>{new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0"))}, 60000);

Merci
Membre enregistré
3 912 messages
Popularité : +227 (347 votes)
Posté le 10 mai 2024 - 14:01
Bonjour,
Pour plus d'info il faudrait que tu te réfères à la doc c# entre autre List, ICollection et IEnumération.
List peut être comparé à un tableau associatif de classe.
En ce qui concerne "new", cela correspond à "allouer"

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 10 mai 2024 - 14:02