#!/bin/bash # Récupération des volumes de données passées par les interfaces # Tableau associatif principal pour stocker uniquement les interfaces à monitorer de l'équipement : # interfaces[nom] = index incrémental applicatif # ex : interfaces["Gi1/0/1"] = 0 # Cet index sert à identifier l'interface choisie dans les tableaux suivants. # # Un tableau indexé classique par attribut monitoré est ensuite créé : # index dans les OID de l'interface : ifOidIndexes[index] = ifOidIndex # description de l'interface : ifDescriptions[index] = ifDescr # vitesse de l'interface : ifSpeeds[index] = ifSpeed # compteur d'octets in : ifBytesIN[index] = ifBytesIN # compteur d'octets out : ifBytesOUT[index] = ifBytesOUT # path de snmpwalk sur le système snmpwalkPath=/usr/bin/snmpwalk # OID de base des noms d'interface oidIfnames=iso.3.6.1.2.1.31.1.1.1.1 # OID de base des descriptions d'interface oidIfDescriptions=1.3.6.1.2.1.2.2.1.2 # OID de base des vitesses d'interface oidIfSpeeds=1.3.6.1.2.1.2.2.1.5 # OID de base des compteurs octets IN oidIfBytesIN=1.3.6.1.2.1.2.2.1.10 # OID de base des compteurs octets OUT oidIfBytesOUT=1.3.6.1.2.1.2.2.1.16 # Test arguments entrés if [[ $# -eq 0 ]]; then echo 'Erreur de paramètre : le fichier de configuration de bandwith doit être passé' echo 'Usage : bandwith.sh fichier_bandwith.conf' exit 1 fi; # Source de la configuration et tests fichiers if [ ! -e $1 ]; then echo 'Erreur : fichier '$1' non trouvé.' exit 1 fi; source $1; # Index des interfaces de l'équipement : tableau associatif, exemple : interfaces["Gi1/0/6"] = 3 declare -A interfaces for i in ${!ifnames[@]}; do interfaces[${ifnames[$i]}]=$i done # Recherche des noms d'interface de l'équipement. # Paramètres de snmpwalk walkParams=' -v '$version' -c '$community' -Oq '$ip' ' # Récupération des interfaces de l'équipement avec leur nom walkIfname=$($snmpwalkPath $walkParams $oidIfnames) # Recherche dans tous ces noms d'interfaces, ceux demandés par le monitoring. # Quand un nom est trouvé, on stocke son OID (index dans les OID) dans le tableau ifOidIndexes # https://www.tldp.org/LDP/abs/html/string-manipulation.html n=1 # compteur oidIdx= # valeur courante oid d'interface substringToRemove=$oidIfnames. # chaîne à retirer du résultat oidDeBase+'.' for w in $walkIfname; do # $walkInfame contient une suite de paires OID, nom. On ne retiendra donc que l'OID correspondant au nom, soit l'élément précédent # on ne traite donc qu'un élément sur deux. modulo=$(($n%2)) if [ $modulo == 0 ] then # le résultat courant du walk fait-il partie des clés du tableau des interfaces à monitorer ? # si oui, on le stocke son indexOID dans le tableau ifOidIndexes for i in ${!interfaces[@]}; do nom=\"$i\" if [ $nom = $w ]; then index=${interfaces[$i]} ifOidIdx=${oidIdx#$substringToRemove} # retrait de la chaine OID de base+'.' pour ne conserver que l'indexOID final echo $ifOidIdx # stocker cet oidIndex dans le tableau au bon index $index fi done else oidIdx=$w fi n=$((n+1)) done