0

🖨️ Récupérer des compteurs d’imprimantes réseau avec des batchs MS-DOS et SNMP en 5 lignes

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
)
Vous pouvez évaluer cet article en un clic. Garanti sans gluten. Merci !
(Evaluations : 5 / Moyenne : 4.2)

Krak

Dompteur d'IA, machine prolifique à pisser du code de merde non commenté et pas opti depuis 1986, maître des traditions / maître-brasseur / grand malade à WoW, chasseur de gardiens à Ingress de 2014 à 2019, nerd sapiosexuel monomaniaque, amateur de piments 🌶️ au delà de 300.000 Scoville grâce à Stéphane Pécaut et de pizzas maison 🍕 grâce à Marloin, j'apprécie particulièrement les 3C (les chats 😼, le code et les choux de Bruxelles 🥦) & la philosophie du CCC.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *