Le code est difficilement réutilisable, j’ai écris ça à mesure de l’évolution des besoins.
Le fichier list_sw contient une adresse IP par ligne.
L’analyse de chaque équipement est lancée en parallèle, attention à la charge généré sur le système (j’ai atteins une charge à 2 chiffres pour une analyse sur une soixantaine de pile).
- Code: Tout sélectionner
#!/bin/bash
#
# Ce script distribué sous la licence GNU FDL a été développé a l'origine par Eric BOUCHE
#
# Site officiel du script : http://2037.org/ || http://it.2037.biz/viewtopic.php?t=8626
#
# Permission vous est donné de distribuer, modifier ce script tant que cette note apparaît clairement
#
# Version 1.0.0 du 1 fevrier 2008
#
rm -f logs
rm -f switch.csv
echo ";IP;Nom;Location;SW desc;Num port;Inter desc;PWR Capable;Vitesse;Etat;UPTime;MDA Capable;ATTention;TOIP Capable;" > switch.csv
for e in `cat list_sw`
do
nice -n 15 ./get_info.sh $e &
sleep 10
done
while [ "$pause" != "go" ]
do
echo "attendre la fin du traitement puis [go]"
read pause
done
for e in `cat list_sw`
do
cat tmp/logs_$e >> logs
cat tmp/switch_$e.csv >> switch.csv
done
- Code: Tout sélectionner
#!/bin/bash
#
# Ce script distribué sous la licence GNU FDL a été développé a l'origine par Eric BOUCHE
#
# Site officiel du script : http://2037.org/ || http://it.2037.biz/viewtopic.php?t=8626
#
# Permission vous est donné de distribuer, modifier ce script tant que cette note apparaît clairement
#
# Version 1.0.0 du 1 fevrier 2008
#
#
# env
ipadd=$1
rm -f tmp/switch_$ipadd.csv
rm -f tmp/logs_$ipadd
# recuperation des infos
/usr/bin/snmpwalk -c /public $ipadd > tmp/tmp_snmp_$ipadd
# cache
execc_snmpwalk="cat tmp/tmp_snmp_$ipadd"
# debug
#debug=true # commenter la ligne pour desativer
# nombre interface reseau
nb_if=`$execc_snmpwalk | awk '/^ifNumber.* /{print \$2}'`
uptimee=`$execc_snmpwalk | awk '/^sysUpTime.* /{print \$2}'`
for y in sysDescr sysName sysLocation
do
declare ${y}="`$execc_snmpwalk | awk '/'$y'.* /{print \$0}' | sed s/$y...//`"
done
for z in sysUpTime
do
declare ${z}="`$execc_snmpwalk | awk '/'$z'.* /{print \$2}'`"
done
#
# variable def switch
port_nb=1
port_tmp=1
nb_port_down=0
nb_port_up=0
nb_port_10=0
nb_port_100=0
nb_port_fx=0
nb_port_pwr=0
nb_port_poss=0
nb_port_toip=0
nb_port_toip_poss=0
while [ "$port_nb" -le "$nb_if" ]
do
[ -n "$debug" ] && echo "Traitement $port_tmp"
#
# def variable port
ifDescr=`$execc_snmpwalk | grep "ifDescr.$port_tmp "| sed s/ifDescr...//`
ifDescrMDA=`echo $ifDescr | egrep '(MDA|Gbic)'`
ifDescrPWR=`echo $ifDescr | grep 'PWR'`
ifDescr470=`echo $ifDescr | grep '470'`
ifSpeed=`$execc_snmpwalk | awk '/ifSpeed'.$port_tmp' /{print \$2}'`
ifOperStatus=`$execc_snmpwalk | awk '/^ifOperStatus'.$port_tmp' /{print \$2}'`
ifLastChange=`$execc_snmpwalk | awk '/ifLastChange'.$port_tmp' /{print \$2}'`
# on ecarte les ports interconnexions
mda_csv=""
if [ -z "$ifDescrMDA" ] && [ "$ifSpeed" -ne 0 ]
then
# port up
if [ "$ifOperStatus" -eq 1 ]
then
nb_port_up=`expr $nb_port_up + 1`
# port down
elif [ "$ifOperStatus" -eq 2 ]
then
# si le port est down depuis plus de 60 unites alors il est non utilisé
if [ $(((sysUpTime-ifLastChange)/8640000)) -gt 60 ]
then
nb_port_down=`expr $nb_port_down + 1`
else
err="true"
fi
fi
# port 10 mbs
if [ "$ifSpeed" -gt 10000000 ]
then
[ -n "$debug" ] && echo "port $port_tmp 100 mbs ou plus"
nb_port_100=`expr $nb_port_100 + 1`
elif [ "$ifSpeed" -ne 0 ]
then
[ -n "$debug" ] && echo "port $port_tmp 10 mbs"
nb_port_10=`expr $nb_port_10 + 1`
err="true"
fi
# PWR
PWR_csv=" "
if [ "$ifDescrPWR" != "" ]
then
[ -n "$debug" ] && echo "PWR Capable"
nb_port_pwr=`expr $nb_port_pwr + 1`
PWR_csv="PWR Capable"
elif [ "$ifDescr470" != "" ]
then
nb_port_poss=`expr $nb_port_poss + 1`
PWR_csv="PWR Possible"
fi
# bilan
toip_csv=""
if [ "$ifSpeed" -gt 10000000 ] && [ "$ifDescrPWR" != "" ]
then
[ -n "$debug" ] && echo "TOIP Capable"
nb_port_toip=`expr $nb_port_toip + 1`
toip_csv="TOIP Capable"
elif [ "$ifSpeed" -gt 10000000 ] && [ "$ifDescr470" != "" ]
then
nb_port_toip_poss=`expr $nb_port_toip_poss + 1`
toip_csv="TOIP Possible"
fi
else
[ -n "$debug" ] && echo "$ifDescr"
nb_port_fx=`expr $nb_port_fx + 1`
mda_csv=$((ifSpeed/1000000))
ifSpeed=" "
fi
#
# fichier csv
echo ";$ipadd;$sysName;$sysLocation;$sysDescr;$port_tmp;$ifDescr;$PWR_csv;$((ifSpeed/1000000));`if [ "$ifOperStatus" = "1" ] ; then echo "up" ; else echo "down"; fi`;$(((sysUpTime-ifLastChange)/8640000));$mda_csv;`[ "$err" = "true" ] && echo "/!\ "`;$toip_csv;" >> tmp/switch_$ipadd.csv
# procedure de fin
port_tmp=`/usr/bin/snmpgetnext -c /public $ipadd .1.3.6.1.2.1.2.2.1.1.$port_tmp | awk '{print $2}'`
port_nb=`expr $port_nb + 1`
err=""
done
# on fait les comtpes
echo -e "#####################"
echo "IP $ipadd"
echo "Nom $sysName"
echo "Loca $sysLocation"
echo "Hard $sysDescr"
echo "Time $((sysUpTime/8640000))"
echo -e "\nSwitch $nb_if port"
echo "$nb_port_up ports up"
echo "$nb_port_down ports down"
echo -e "\n$nb_port_10 ports 10 mbs"
echo "$nb_port_100 ports 100 mbs ou plus"
echo "$nb_port_fx ports autre(s)"
echo -e "\n$nb_port_pwr ports PWR Capable"
echo "$nb_port_poss ports PWR Possible"
echo "$nb_port_toip ports TOIP Capable"
echo "$nb_port_toip_poss ports TOIP Possible"
echo -e "#####################"
echo -e "#####################" >> tmp/logs_$ipadd
echo "IP $ipadd" >> tmp/logs_$ipadd
echo "Nom $sysName" >> tmp/logs_$ipadd
echo "Loca $sysLocation" >> tmp/logs_$ipadd
echo "Hard $sysDescr" >> tmp/logs_$ipadd
echo "Time $sysUpTime" >> tmp/logs_$ipadd
echo -e "\nSwitch $nb_if port" >> tmp/logs_$ipadd
echo "$nb_port_up ports up" >> tmp/logs_$ipadd
echo "$nb_port_down ports down" >> tmp/logs_$ipadd
echo -e "\n$nb_port_10 ports 10 mbs" >> tmp/logs_$ipadd
echo "$nb_port_100 ports 100 mbs ou plus" >> tmp/logs_$ipadd
echo "$nb_port_fx ports autre(s)" >> tmp/logs_$ipadd
echo -e "\n$nb_port_pwr ports PWR Capable" >> tmp/logs_$ipadd
echo "$nb_port_poss ports PWR Possible" >> tmp/logs_$ipadd
echo "$nb_port_toip ports TOIP Capable" >> tmp/logs_$ipadd
echo "$nb_port_toip_poss ports TOIP Possible" >> tmp/logs_$ipadd
echo -e "#####################\n" >> tmp/logs_$ipadd
exit 0
Exemple de sortie :
Sortie fichier logs a écrit:#####################
IP 10.20.30.40
Nom Switch distrib B30
Loca BAT. 30, rdc, BA01
Hard Business Policy Switch 2000 HW:04 FW:3.0.0.5 SW:v3.0.3.08 ISVN:2
Time 1165819891
Switch 180 port
136 ports up
13 ports down
13 ports 10 mbs
155 ports 100 mbs ou plus
12 ports autre(s)
0 ports PWR Capable
144 ports PWR Possible
0 ports TOIP Capable
135 ports TOIP Possible
#####################
On a également en sortie un fichier csv (tableau excel) avec le detail de chaque pile, switch, port...
PWR Capable indique que l'élément supporte POE
PWR Possible indique que l'élément supporte POE mais qu'il n'est pas activé sur l'unité (raison de firmware)
TOIP Capable indique que l'élément peut être utilisé pour la téléphonie sur IP
TOIP Capable indique que l'élément est susceptible de pouvoir faire le la TOIP
Commentaire par rapport à ce sujet : topic8977.html



