Ces jours, j’ai commencé à sérieusement bricoler avec le protocole SNMP. C’est un des rares protocoles que j’ai appris à l’université qui soit encore largement utilisé. Je travaille avec le package SNMP4J qui, s’il n’est pas idéal, est relativement complet.
À quoi sert SNMP ? Il s’agit à l’origine d’un protocol pour ‘parler’ aux différents appareils qui forment l’infrastructure du réseau: routeurs, switches etc. Si à l’origine ce protocol était uniquement implémenté dans le matériel haut de gamme, de nos jours, on trouve un petit serveur (agent en langage SNMP) dans la plupart des équipements réseaux, jusqu’aux routeurs ADSL et aux imprimantes réseau. Curieusement, on trouve rarement un agent SNMP sur les PCs ce qui est dommage, cela simplifierait pas mal la vie des administrateurs systèmes.
Un des concepts clefs de SNMP est la MIB, c’est la base de donnée qui représente l’état et la configuration de l’appareil. Chaque élément de la MIB est identifié par une clef (appelée OID) et une valeur, qui est un type de base (string, différentes sortes d’entiers). En structurant les OIDs on peut construire des tables. Que contient la MIB ? Virtuellement n’importe quoi. Cela va depuis le nom de la personne de contact responsable pour l’équipement (OID 1.3.6.1.2.1.1.4.0
), jusqu’à la configuration des différentes interfaces réseau.
Pour utiliser SNMP, sous Unix, on a à disposition une série de commandes. La plus simple est la commande snmpget
qui permet de lire une variable de la MIB. Par exemple, j’aimerais savoir ce qui se cache derrière une adresse IP, en l’occurrence une imprimante ici.
snmpget -v 1 -c public ps-is16e0r0.jaist.ac.jp SNMPv2-MIB::sysDescr.0
Le paramètre v
spécifie la version de SNMP qu’on va utiliser (1), le paramètre c
spécifie la communauté. La communauté est une sorte de mot de passe.
L’imprimante va me répondre:
SNMPv2-MIB::sysDescr.0 = STRING: RICOH IPSiO NX850 2.00 / RICOH Network Printer C model
Le code SNMPv2-MIB::sysDescr.0
est une forme humainement lisible de l’OID 1.3.6.1.2.1.1.1.0
. Ensuite vient le type de la réponse (une chaîne de caractères), et enfin la réponse, en l’occurrence le modèle de l’imprimante.
Une commande plus générale est snmpwalk
, celle-ci permet d’explorer une portion de la MIB. La commande suivante demande tous les éléments qui font partie des informations de base sur un nœud du réseau (en l’occurrence ma propre machine, sur laquelle j’ai lancé le démon snmpd).
snmpwalk -v 1 -c public 127.0.0.1 1.3.6.1.2.1.1
Le résultat est la séquence d’information suivante:
MPv2-MIB::sysDescr.0 = STRING: Darwin kt-dhcp01.jaist.ac.jp 8.2.0 Darwin Kernel Version 8.2.0: Fri Jun 24 17:46:54 PDT 2005; root:xnu-792.2.4.obj~3/RELEASE_PPC Power Macintosh SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.255 SNMPv2-MIB::sysUpTime.0 = Timeticks: (69916504) 8 days, 2:12:45.04 SNMPv2-MIB::sysContact.0 = STRING: "Matthias Wiesmann" SNMPv2-MIB::sysName.0 = STRING: kt-dhcp01.jaist.ac.jp SNMPv2-MIB::sysLocation.0 = STRING: "JAIST 6th floor" SNMPv2-MIB::sysServices.0 = INTEGER: 76 SNMPv2-MIB::sysORLastChange.0 = Timeticks: (500) 0:00:05.00 …
Comme dit plus haut, une grande partie des informations dans la MIB sont structurées comme des tables. Par exemple l’imprimante mentionnée plus haut a un table de système de stockage. On peut visualiser cette table grâce à la commande suivante
snmptable -v 1 -c public ps-is16e0r0.jaist.ac.jp 1.3.6.1.2.1.25.2.3
Le résultat est la table suivante:
SNMP table: HOST-RESOURCES-MIB::hrStorageTable hrStorageIndex hrStorageType hrStorageDescr hrStorageAllocationUnits hrStorageSize hrStorageUsed hrStorageAllocationFailures 1 HOST-RESOURCES-TYPES::hrStorageRam RAM 1 Bytes 301989888 301989888 0 2 HOST-RESOURCES-TYPES::hrStorageOther FLASH 1 Bytes 8388608 8388608 0
La même commande sur mon laptop donne les résultat suivants
SNMP table: HOST-RESOURCES-MIB::hrStorageTable hrStorageIndex hrStorageType hrStorageDescr hrStorageAllocationUnits hrStorageSize hrStorageUsed hrStorageAllocationFailures 1 HOST-RESOURCES-TYPES::hrStorageOther Memory Buffers 256 Bytes ? ? ? 2 HOST-RESOURCES-TYPES::hrStorageRam Real Memory 4096 Bytes 0 2131376 ? 3 HOST-RESOURCES-TYPES::hrStorageVirtualMemory Swap Space 4096 Bytes 2131124 -1073746432 ? 4 HOST-RESOURCES-TYPES::hrStorageFixedDisk / 4096 Bytes 19504908 15949534 ? 5 HOST-RESOURCES-TYPES::hrStorageFixedDisk /dev 512 Bytes 2 2 ? 6 HOST-RESOURCES-TYPES::hrStorageFixedDisk /dev 512 Bytes 2 2 ? 7 HOST-RESOURCES-TYPES::hrStorageFixedDisk /.vol 512 Bytes 1024 1024 ? 8 HOST-RESOURCES-TYPES::hrStorageFixedDisk /Network 512 Bytes 0 0 ? 9 HOST-RESOURCES-TYPES::hrStorageFixedDisk /automount/Servers 512 Bytes 0 0 ? 10 HOST-RESOURCES-TYPES::hrStorageFixedDisk /automount/static 512 Bytes 0 0 ?
Une autre table très utile est celle qui contient la liste des adresses IP pour un equipement donné.
snmptable -v 1 -c public 127.0.0.1 1.3.6.1.2.1.4.20 SNMP table: IP-MIB::ipAddrTable ipAdEntAddr ipAdEntIfIndex ipAdEntNetMask ipAdEntBcastAddr ipAdEntReasmMaxSize 127.0.0.1 1 255.0.0.0 1 ? 150.65.26.79 5 255.255.254.0 1 ? 150.65.239.67 4 255.255.255.128 1 ?
Donne la liste des interfaces réseaux, dans mon cas, il y en a trois active en ce moment, ethernet (4), wifi (5) et l’interface loopback (1).
La chose intéressante est naturellement de pouvoir visualiser tous les appareils connectés au réseau de manière uniforme. La prochaine fois, j’essayerais de vous parler des notifications (trappes).
Tu ne parles pas des community ?
As tu un soft qui permet d’interroger tous les éléments d’un réseau ? Ça m’intéresse !
Bye Mentat
Une chose après l’autre. Je parlerais des community une autre fois. Je ne connais pas de soft pour interroger tous les éléments d’un réseau mais tu dois pouvoir écrire un script qui fait ça.
Ce que j’aime Mathias quand tu nous parles d’informatique, c’est que c’est vraiment du chinois pour moi et que définitivement, j’ai bien fait de choisir chimie!!!
Ben non, moi je trouve que ça va :)
Deux ‘t’ à Matthias, comme dans ‘noisette’. :-)