Introduction – Les MIB
Les MIB (Management Information Base) sont des informations structurées que l’on retrouve pour tous les matériels réseau (switches, firewalls, routeurs, serveurs, postes de travail, imprimantes…). Ces informations peuvent être lues à distance et parfois modifiées à l’aide du protocole SNMP (Simple Network Management Protocol).
La structure d’une MIB est hiérarchisée en forme d’arbre. Chaque information de la MIB est représentée sous une forme unique de suite de nombres, par exemple 1.3.6.1.2.1.2.2.1.2 :
Explorer une MIB
Des logiciels tels que BPSNMPUtil permettent d’explorer les MIB graphiquement :
[Pré-requis] Installer le protocole SNMP
SNMP est un protocole de gestion de réseau qui permet d’interroger à distance des matériels TCP/IP et de les superviser. La plupart des logiciels de supervision réseau tels que PRTG utilisent SNMP.
Une requête SNMP est un paquet UDP envoyé par le superviseur vers l’agent du matériel cible chargé de retourner la réponse. Pour que votre ordinateur soit superviseur, vous devez installer SNMP.
Pourquoi des batchs MS-DOS ?
Les requêtes SNMP auraient pu être envoyées en Python ou en PHP, mais j’ai choisi les batchs MS-DOS pour insister sur la simplicité de la chose.
C’est parti !
REM Fichier parser_imprimante.bat REM Argument 1 : adresse IP de l'imprimante SET Timeout=2 SET imprimante=%1 SET Sortie=%imprimante%.txt REM MODELE DE L'IMPRIMANTE snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.25.3.2.1.3.1 >> %Sortie%
Ce script de 5 lignes se lance comme suit parser_imprimante.bat 192.168.0.100 et écrit dans le fichier 192.168.0.100.txt le modèle de l’imprimante (le noeud .1.3.6.1.2.1.25.3.2.1.3.1 ). Voici les noeuds dans les MIB pour récupérer numéro de série, uptime et compteur d’impression :
REM NUMERO DE SERIE snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.43.5.1.1.17.1 >> %Sortie% REM UPTIME snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.1.3 >> %Sortie% REM COMPTEURS D'IMPRESSION snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.43.10.2.1.4.1.1 >> %Sortie%
En sortie, voici le contenu du fichier 192.168.0.100.txt :
SNMPv2-MIB::sysDescr.0 = STRING: Dell B2375dfw Mono MFP; V4.70.01.17;Engine V1.00.01;NIC V4.01.29 SNMPv2-SMI::enterprises.236.11.5.1.1.1.4.0 = STRING: "82035Y1" DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (241764700) 27 days, 23:34:07.00 SNMPv2-SMI::enterprises.236.11.5.1.1.3.27.0 = INTEGER: 10442
On retrouve bien le modèle, le numéro de série, l’uptime et le compteur. Ce fichier peut facilement être parsé.
Noter qu’il y a plusieurs compteurs d’impression suivant les modèles (impressions monochromes, impressions couleurs, photocopies, RV…)
D’autres noeuds intéressants :
- Niveaux des cartouches
- SMTP si l’imprimante peut envoyer des mails
- Durée avant maintenance
- Localisation géographique de l’imprimante
- …
Et pour éviter le scan d’une imprimante qui n’est pas en ligne :
snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.1.3 > NUL if errorlevel 1 (REM echo %imprimante% n'est pas en ligne
REM echo. REM echo ATTENTION : L'imprimante %imprimante% n'est pas en
ligne
REM CREATION DU FICHIER VIDE
echo. > %Sortie%-OFFLINE.txt
GOTO :EOF
) else ( REM echo %imprimante% est en ligne REM ON CONTINUE )
Le script intégral
REM Fichier parser_imprimante.bat REM Argument 1 : adresse IP de l'imprimante SET Timeout=2 SET imprimante=%1 SET Sortie=%imprimante%.txt snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.1.3 > NUL if errorlevel 1 (REM L'imprimante n'est pas en ligne
REM CREATION DU FICHIER VIDE
echo. > %Sortie%-OFFLINE.txt
GOTO :EOF
) else ( REM echo %imprimante% est en ligne REM ON CONTINUE ) REM MODELE DE L'IMPRIMANTE snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.25.3.2.1.3.1 >> %Sortie% REM NUMERO DE SERIE snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.43.5.1.1.17.1 >> %Sortie% REM UPTIME snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.1.3 >> %Sortie% REM COMPTEURS D'IMPRESSION snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.43.10.2.1.4.1.1 >> %Sortie% REM NOM DE L'IMPRIMANTE snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.1.5 >> %Sortie%.txt
parser_imprimante.bat 192.168.0.100 parser_imprimante.bat 192.168.0.102
Comment trouver les noeuds dans la MIB correspondant aux informations que l’on cherche ?
C’est très simple ! Par une recherche inversée : on cherche ce qu’on connait déjà et on obtient le nœud. Utilisez pour cela un explorateur de MIB qui permet d’exporter l’intégralité de la MIB. Cherchez ensuite le nom de l’imprimante, et vous aurez le nœud correspondant à son nom.
Pour trouver le noeud correspondant à un compteur d’impression, il faut connaitre d’avance et précisément ce compteur (voir sur l’imprimante) et le trouver dans la MIB. Attention, le compteur d’impression évolue en temps réel !
Ca se corse quand ?
Ca se corse lorsqu’on se rend compte que, selon le modèle d’imprimante, le nœud n’est pas le même pour le numéro de série par exemple. Là, il faudra tester le modèle avant d’explorer le nœud :
IF %Modele% EQU BROTHER-MFC9120 ( snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.2.1.43.5.1.1.17.1 >> %Sortie% Echo 02 Numero de Serie ………….. OK GOTO SUITE03 ) IF %Modele% EQU LEXMARK-C792 ( snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.4.1.641.2.1.2.1.6.1 >> %Sortie% Echo 02 Numero de Serie ………….. OK GOTO SUITE03 ) IF %Modele% EQU TOSHIBA-ESTUDIO256 ( snmpwalk -t %Timeout% -v 1 -c public %imprimante% .1.3.6.1.4.1.1129.2.3.50.1.2.4.1.28.1.1 >> %Sortie% Echo 02 Numero de Serie ………….. OK GOTO SUITE03 )