1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| #!/bin/bash
#########################################################################################
# #
# #
# Requirements: snmpwalk, snmpget (available in NetSNMP package) #
# Last modification: 03/06/2014 #
# Purpose of this plugin: detection de cout STP sur les ports #
# #
# Arguments: #
# ./check-multi-stp-cisco.sh community snmp_version #
# $1 $2 #
#########################################################################################
# fichier de correspondance
file_stp='/usr/local/nagios/type_stp.txt'
folder='/usr/local/nagios/STP'
# fichier cisco
fileCisco='/usr/local/nagios/cisco.txt'
# OID STP cisco
OID_STP_COST='1.3.6.1.2.1.17.2.15.1.5'
OID_PORT_STP='1.3.6.1.2.1.17.2.15.1.3'
OID_DESC_PORT='1.3.6.1.2.1.17.1.4.1.2'
OID_STP_TYPE='1.3.6.1.4.1.9.9.82.1.6.1'
# variables pour SNMP
community='adelweb94public'
version='-v1'
# fonction de base STP
fn_stp () {
cmd=$(snmpwalk -c $community $version $a $OID_PORT_STP | awk -F "[.=]" '{print $12}' | wc -l)
}
fn_stp2 () {
cmd1=$(snmpwalk -c $community $version $a $OID_PORT_STP | awk -F "[.=]" '{print $12}' | tail -n $i | head -n 1)
}
# fonction pour afficher le mode de fonctionnement du STP sur l'equipement cisco
type_stp () {
cmd2=$(snmpwalk -c $community $version $a $OID_STP_TYPE | awk {'print $4'})
}
# on fait une boucle pour lire chaque ligne du fichier de correspondance des équipements cisco
while read a; do
# on execute les différentes fonctions
fn_stp
type_stp
# on va verifier le label du STP sur l'equipement cisco
type_stp_label=$(awk -F ":" -vword="$cmd2" '($0 ~ word){print $2}' "$file_stp")
# on regarde si $cmd est égal ou non à 0, si c'est égal à 0, alors pas de ports en STP, sinon on va effectuer une verification
if [[ $cmd = "0" ]]
then
echo "$a n'a pas de ports en STP" > $folder/$a
elif [[ $cmd != "0" ]]
# on initialise la variable total_stp afin qu'elle se vide à chaque passage pour chaque equipement
total_stp=' '
then
for (( i=$cmd ; i>0 ; i-=1 ))
do
# on execute la dernière fonction
fn_stp2
# on se met à chercher quels sont les ports qui font du STP, et on va chercher leurs couts
cout_ports_stp_isole=$(snmpwalk -c $community $version $a $OID_STP_COST.$cmd1 | awk {'print $4'} | tail -n $i | head -n 1)
PORTS_isole=$(snmpwalk -c $community $version $a $OID_DESC_PORT.$cmd1 | awk {'print $4'} | tail -n $i | head -n 1)
ports_desc_stp_isole=$(snmpwalk -c $community $version $a IF-MIB::ifDescr.$PORTS_isole | awk {'print $4'} | tail -n $i | head -n 1)
stp=$"[le cout de $ports_desc_stp_isole est de $cout_ports_stp_isole]"
total_stp="$total_stp $stp"
done
echo $a est en $type_stp_label > $folder/$a
echo $total_stp >> $folder/$a
fi
done < "$fileCisco" |