Aller au contenu
jjacques68

Protocole SNMP

Recommended Posts

Hello tout le monde !

 

Je souhaite me lancer dans le SNMP afin de piloter mes nouveaux point d'accès Wifi.

Les anciens étaient piloter par telnet, c'était facile...

 

L'idée est de pouvoir depuis un QA activer/désactiver le wifi de l'AP.

 

Je possède le MIB de l'équipement. C'est tout :)

 

J'ai tenté de télécharger des outils soi-disant permettant  d'exploiter le SNMP, mais à part m'installer une usine à gaz de soft de gestion d'équipement global d'un réseau, y a pas grand chose d'intéressant ou trop compliqué.

J'ai tout viré.

 

Donc ma question est la suivante :

 

Existe-t-il un outil (tout simple) permettant d'envoyer des commandes SNMP vers un équipement ?

Et voir la commande générée ?

ainsi que la réponse reçue ?

 

J'ai le QA onduleur EATON de @Lazer , mais je galère, je pense que c'est compliqué pour commencer.

 

Si vous avez d'autres idées pour se lancer !

Toutes doc ou exemples seraient le bienvenu :) 

 

Merci d'avance !!

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Sous Linux c'est très facile.

Installation :

apt install snmp

Exemple d'utilisation de snmpget pour obtenir une infirmation sur un onduleur :

snmpget -m +/root/stdupsv1.mib -On -c public -v 1 192.168.1.1 UPS-MIB::upsAlarmBatteryBad

On y voit l'utilisation d'une MIB dans un fichier.

 

Et aussi snmpwalk pour parcourir tout une branche d'un arbre SNMP.

 

Ces 2 commandes sont indispensables pour se balader à la recherche des infos qu'on veut.

 

 

Après la protocole est un peu particulier, ce que j'ai fait en LUA avec mes Modules virtuels puis QuickApp, c'est d'implémenter complètement le protocole SNMP v1 en LUA.

J'ai bien fait les choses, puisque c'est une librairie (fichier, ou plutôt une table au sens LUA du terme) complètement indépendante, qu'on peut réutiliser dans n'importe quel QuickApp (ou même en dehors de la HC3, c'est du LUA standard après-tout). J'ai eu le nez creux lorsque je l'ai développé pour HC2, puisque le portage sur HC3 était quasiment instantané.

Je l'ai utilisé pour d'autres VD et QA jamais partagés : mon routeur Ubiquiti par exemple (voilà de quoi faire criser @mprinfo qui s'acharne à le faire en passant par l'API.

Testé rapidement aussi sur les switchs Cisco, c'est fonctionnel.

 

Ce qu'il faudrait que je te fasse, c'est une doc pour utiliser ma librairie... fraichement c'est super facile.

 

 

Modifié par Lazer
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

merci @Lazer, il faut que je me penche la-dessus.

Je vais utiliser le raspberry qui est pour l'antenne supplémentaire de jeedom...

 

J'ai trouver des petits outils permettant de lister l'arborescence du MIB.

Ils permettent aussi d'utiliser plusieurs fonctions (get, set, walk justement, ...)

Il y en a un qui découvre lui même les OID, mais visiblement, que les OID "standard", pas le spécifique au produit (je sais pas si ce que je dis est juste...)

 

Par contre je me suis rendu compte en faisant des essais que le MIB que j'ai trouvé sur le net n'est pas la bon :( 

 

Je savais pas qu'avec WALK du peux tout parcourir, bon à savoir...

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 16 heures, Lazer a dit :

Sous Linux c'est très facile.

chose faite.

 

Alors la propriété qui m'intéresse est dans la zone private : 1.3.6.1.4 (.1.3.6.1.4.1.4526.100.7.14.2.1.1.3)

 

et je ne comprends pas pourquoi je n'y accède pas  (avec le snmpwak ou même un get)

root@raspberrypi:/home/pi# snmpwalk -v 2c -c private  192.168.2.77 1.3.6.1.4

réponse :

iso.3.6.1.4 = No Such Object available on this agent at this OID

alors que si je fait la branche 1.3.6.1.2 (mgmt), j'ai des centaines de résultats, mais pas ceux que je souhaite

 

j'ai essayé avec la community "public" mais change rien.

 

une idée ? merci d'avance !!!!

 

PS : j'ai biensûr activé le contrôle SNMP sur l'équipement

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors je viens donner des news...

 

Visiblement le SNMP de l'équipement que j'ai, NETGEAR WAC510, déconne :( 

J'ai entrevu une discution sur un forum...

Pas de chance...

J'ai contacté le support technique, on verra bien, je sens bien que ça va être retour à l'envoyeur ce truc... si je peux...

 

Concernant le fonctionnement du SNMP :

 

J'ai d'autres équipements supportant le SNMP (et de la même marque), et j'ai donc pu m'amuser un peu...

 

Je pense avoir plus ou moins compris le protocole.

En croisant le MIB, des captures de paquets avec wireshark et surtout le QA EATON de @Lazer, on finit par comprendre la logique :) 

Construction de la trame : type de donnée, longueur de la donnée, la donnée, etc etc etc ...

 

Par contre @Lazer je vais te piquer les fonctions de convertions en hex et autres... :) 

 

un outil sympas sous windows pour jouer avec le SNMP : le MIB Browser http://www.ireasoning.com/

 

Petite question quand même :  :) 

 

Dans la trame, il y a un ID de requête : 

 

image.png.9608f9d082a01ed2de1f9d4d77515d5d.png

 

@Lazer, tu utilises une formule de fou qui fait mal à la tête :) 

local requestID = math.min(2 ^ 32, tonumber(string.sub(tostring(os.time()), -7)) * 100 + math.random(1, 99) + step)

mais cette ID peut être n'importe quel nombre, et le même à chaque fois (d'après mes essais) ??

il pourrait même être égale à "1" dans ce cas, la trame serait : "02 01 01" sans oublier de corriger les longueurs de trame à chaque fois...

ou je me trompe ? 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas de chance pour ton appareil Netgear.... en même temps... Netgear quoi, tout est dit...

 

Tu ne vas quand même pas réécrire tout le code du protocole SNMP ? Tu ne te rends pas compte, c'est un travail de fou, si je partage mon travail, c'est justement pour qu'il serve à la communauté.

Je vais te préparer un tuto, laisse moi un peu de temps (et tu verras c'est vraiment ultra simple à utiliser)

 

Le 12/02/2022 à 08:00, jjacques68 a dit :

Il y en a un qui découvre lui même les OID, mais visiblement, que les OID "standard", pas le spécifique au produit (je sais pas si ce que je dis est juste...)

Oui c'est ça, il y a des OID qui sont standards et qu'on retrouve dans tous les équipements, et ensuite chaque constructeur peut implémenter ses propres OID spécifiques. C'est pour cela qu'ils fournissent des fichiers de MIB, ça permet d'obtenir le nom et le descriptif de chaque OID.

 

Le 12/02/2022 à 09:45, jjacques68 a dit :

j'ai essayé avec la community "public" mais change rien.

Attention à ne pas utiliser private, c'est réservé à l'écriture.

Normalement on se contente de public, accès en lecture seule, c'est bien suffisant.

 

C'est le moment de parler sécurité.

SNMP n'est pas du tout sécurisé de base... public et private sont par défaut sur tous les équipements, donc du coup, n'importe qui peut consulter voir modifier les informations.

Déjà, on peut commencer par renommer les communautés.

Et certains appareils permettent de filtrer par IP, donc on crée une liste d'accès pour n'autoriser que les équipements autorisés à faire des requêtes SNMP sur l'équipement.

Enfin, idéalement il faudrait faire du SNMP v3 qui permet de chiffrer les communications. Mais là ce n'est pas implémenté dans mon code LUA, beaucoup trop de travail (et je ne sais même pas si ça serait faisable sur la HC3, vu qu'on ne peut toujours pas faire de SSL à ma connaissance)

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Lazer a dit :

Je vais te préparer un tuto, laisse moi un peu de temps

ok sympas merci !

Après avec windev c'est vite fait, mais en lua ... pfffffff

 

il y a une heure, Lazer a dit :

Attention à ne pas utiliser private, c'est réservé à l'écriture.

sauf que dans mon cas, vouloir éteindre le wifi oblige à écrire dans une propriété.

 

il y a une heure, Lazer a dit :

Déjà, on peut commencer par renommer les communautés.

oui tout à fait, c'est déjà le minimum.

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi je ne regrette pas d'être passé chez ubiquiti unifi

Certes ce n'est pas ce qui a de meilleur mais pour une utilisation personnelle c'est vraiment bien

Si on n'est pas un pro du réseau mais que l'on veut administré est surveiller son lan les systèmes unifi est pas mal

Pour l'api c'est très simple à utiliser
Après il faut traiter les tables pour récupérer les données que l'on a besoin
Rien de bien compliqué en lua
@jjacques68 tu serais sous unifi la gestion des ports poe est presque stable avec des childs

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, mprinfo a dit :

serais sous unifi la gestion des ports poe est presque stable avec des childs

j'y avais pensé, coupé le point d'accès en coupant le poe du port, je peux le faire normamelement avec le switch.

toujours en SNMP…

mais je sais pas si les équipements aimeront les hard shutdown plusieurs fois par jour !!

 

Partager ce message


Lien à poster
Partager sur d’autres sites

A vrai dire je ne sais pas si allumer/arrêter un appareil électronique va l'user prématurément ou pas...

 

Mais attention quand même avec l'extinction des bornes Wi-Fi, bien penser à en laisser au moins une allumée dans la maison.

Sinon, les appareils vont chercher du Wi-Fi pendant plusieurs heures.

Avec pour conséquences, une augmentation des ondes et une augmentation de la consommation.

 

il y a 47 minutes, jjacques68 a dit :

sauf que dans mon cas, vouloir éteindre le wifi oblige à écrire dans une propriété. 

Là oui c'est logique.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Lazer a dit :

Sinon, les appareils vont chercher du Wi-Fi pendant plusieurs heures.

alors c'est complètement vrai ! :) 

ça rappel le vieux soucis que j'ai rencontré avec les google home quand on leur coupe le wifi.

Ils bombardent de trames bluetooth pour rechercher désespérant une pseudo connexion.

Conséquence, ça faisait écrouler BLEA de jeedom.

J'ai donc mis un wallplug sur les google home et quand plus de wifi, je shutdown les GH.

depuis, BLEA est stable.

 

En disant ça, ça fait des années que c'est comme ça, et les GH fonctionnent toujours, donc pourquoi pas tenter la même chose avec les AP netgear au SNMP foireux.

Je leur coupe le POE depuis le switch... et basta...

:15:

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui si tu peux couper tous les appareils qui utilisent le Wi-Fi, c'est bon.

 

Perso je mets mon téléphone en mode avion la nuit, mais vu qu'il reste toujours pas mal d'appareils que je peux pas couper (Netatmo, Roborock, etc), la question ne se pose pas, je laisse les bornes Wi-Fi allumées.

Partager ce message


Lien à poster
Partager sur d’autres sites

ben j'ai pas grand chose en wifi, téléphone, tablette, et GH.

Donc ça va...

Mais je coupe aussi quand je suis absent de la maison...

Partager ce message


Lien à poster
Partager sur d’autres sites

je donne des news :

 

le support technique de Netgear confirme que le MIB "propriétaire" des points d'accès WAC510 sont obsolètes.

Donc je laisse tombé de ce côté là.

 

du coup, je coupe le wifi en coupant le POE des ports qui alimentent les PA.

et cela via le SNMP du switch, en utilisant les OID standard.

 

par contre question bonne pratique :

 

j'ai créé un QA parent et x QA child selon le nombre de port à gérer.

J'ai mis la gestion de la socket UDP (write et receive) dans le parent.

Ce qui veut dire que les child appellent ces méthodes dans le parent.

 

Que se passe-t-il si plusieurs child veulent accéder à la méthode write du parent quasi simultanément ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est du UDP, donc à toi de gérer.

Chaque trame SNMP est identifiée par un ID unique.

 

Désolé j'ai oublié de te partager le tuto, je te prépare ça.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vois qu'il y a des préférences certains on le droit à un tuto personnel alors que d'autres on le droit à quelques indices

Moi pour le poe sur le contrôleur unifi j'ai fais comme Jacques

Le GET et le PUT ce font via le parent est je n'ai rencontré aucun soucis tout les PUT sont exécuter. J'ai switcher comme un malade sur plusieurs ports en quelques secondes aucune erreur

Tiens que je vous tiens je fais plusieurs timeout. Je sais qu'il est possible de choutter un timeout. Lorsqu'il y en a plusieurs en cours peut-on choisir celui que l'on veut stopper ?

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 44 minutes, Lazer a dit :

Chaque trame SNMP est identifiée par un ID unique

ah oui exacte, et cet ID revient dans la réponse.

 

@mprinfo :

 

c'est pas un truc du genre :

MonID = setTimeout(...)

clearTimeout(MonID)

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@mprinfo oui mais toi tu as choisi d'exploiter l'API HTTP, donc c'est complètement différent.

 

Là où @jjacques68 utilise SNMP, exactement comme je le fait, donc c'était assez facile de faire un mini tuto. Je n'ai pas écris de code LUA spécifique pour le coup, tout existait déjà.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer je plaisante. Tu as même réussi à me motiver à faire des childs

Pour le clear timeout tu fais comment pour avoir l id de celui que tu veux arrêter ?

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

ben comme je l'ai mis  :

ID = setTimeout(...)

jamais utilisé, je sais même pas si c'est possible...

Modifié par jjacques68
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@jjacques68 merci je vais testé ce week je te tiendrais au courant

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ben j'ai fais ce que je voulais.

Je rappelle, allumer/éteindre mes nouveaux AP wifi depuis la HC3.

 

Donc je pilote cela en SNMP via le switch POE, vu que les MIB des AP sont foireux.

J'ai donc :

1 QA parent contenant les fonction de socket UDP

n QA Child par port du switch que je veux piloter.

Le retour d'état pour mettre à jour les Child, se fait par analyse de la réponse à la trame SetRequest.

 

Merci beaucoup @Lazer pour ta library.

Je m'en suis beaucoup inspiré.

 

Par contre, avec mon principe de QA Child/parent, il y a le soucis avec le coup de plusieurs utilisation des ressources du parents par plusieurs Child simultanément.

C'est le bordel, ça se mélange.

Et c'est normal.

 

Pour bien faire, il faudrait faire, soit une QueueListe, soit comme disait @Lazer, gérer le RequestId de chaque échange.

Que l'on récupère à la réponse.

 

Bref dans mon cas, pour 3 ports, j'ai simplement temporisé :)

 

on verra plus tard.

 

:74:

 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 31 minutes, jjacques68 a dit :

Je m'en suis beaucoup inspiré.

:huh:

Donc tu as tout réécris ?

Tu est bien motivé...

Partager ce message


Lien à poster
Partager sur d’autres sites

Personnellement pour la gestion des ports j'utilise une table avec l'état de tout les ports qui est mis a jour tout les 60s

 

Pour le activation ou désactivation des ports je recharge la table avec un get et je switch le port puis je fais un put

 

j'ai hésiter a faire cela lors du refresh via mainloop. Le probléme que je pouvais rencontré c'est d'avoir un bug si entre temps je switch via le contrôleur unifi

 

Je verrais avec l'usage si la mise a jour via le refresh ne suffirai pas mais mon béta testeur et en vacances :D

Partager ce message


Lien à poster
Partager sur d’autres sites

×