Bonsoir,
Récupérer les IP, c'est bien, mais il y a dyndns.org me direz-vous.
Je répondrai qu'il m'est arrivé de constater que le service était injoignable.
Par contre, mon script originel présentait quelques bugs.
Si la récupération de l'IP ne fonctionnait pas, ce qui arrive une fois de temps en temps et que la variable restait vide, il envoyait un message disant que la nouvelle IP est " " (vide)...
Plutôt gênant.
Pour résoudre ce problème, j'ai doublé le test : d'abord whatip.com puis monip.org.
Mais comme je voulais faire cela de façon à peu près élégante et essayer 3 fois en cas d'échec, j'ai fait une petite boucle.
J'avais déjà utilisé "while" précédemment... alors j'ai voulu varier les plaisirs, j'ai utilisé "until."
J'avais déjà fait des test sur une condition, alors pour compliquer j'ai fait un test sur deux conditions simultanées.
Par rapport à un Domi, un Alex ou J (par exemple), je suis encore un petit joueur, mais je monte en puissance.
Notez que j'ai fait un effort au niveau des commentaires et des indentations.
- Code: Tout sélectionner
#!/bin/bash
#==========:=====================:=============================================================
# Auteur : Date : observation
#==========:=====================:=============================================================
# Jonas : 20100322 : Version 0 et version 1 Creation et mise en production
# Jonas : 20100413 : Version 2 n'envoie l'adresse que lorsqu'elle a change.
# Jonas : 20100630 : Version 3 - correction de bug -
# Envoi un message indiquant l'echec de renouvellement d'adresse
# lorque la variable PUBIP est vide. - Ajoute une source de verification d'IP.
# : : Version
#
#
###############################################################################################################################
# Creation de la variable indiquant le chemin du script et des fichiers associes.
SCRP="/usr/scripts"
#creation variable OLDPUBIP servant de reference pour comparer avec la nouvelle IP.
OLDPUBIP=`cat $SCRP/IPPUB.txt`
#creation et initialisation variable count (compteur incrementiel)
COUNT=0
ENDCOUNT=2
# PUBIP est la variable qui contiendra l'adresse IP publique du site.
PUBIP=""
###############################################################################################################################
# bloc d'instruction visant a recuperer l'adresse IP Publique du site.
# Utilisation d'une boucle until.
# test des variables COUNT ( COUNT = ENDCOUNT ) et PUBIP (PUBIP non nul)
# Si (if) cela echoue par whatIP, il la variable PUBIP (PUBIP est nulle) et dans ce cas recupere l'IP par monip
# Incrementation du compteur a la fin de chaque boucle (sinon, la boucle est infinie).
until [ "$COUNT" -eq "$ENDCOUNT" -o -n "$PUBIP" ]
do
PUBIP=`wget http://www.whatip.com ; grep -i "your IP: " index.html | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`
echo "$PUBIP par whatip"
sleep 3
if [ -z "$PUBIP" ]
then
PUBIP=`wget http://www.monip.org ; grep -i "IP : " index.html | grep -o " [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`
echo "$PUBIP par monip"
else
echo "la variable est deja remplie"
fi
echo " La variable de l'adresse IP contient : $PUBIP "
sleep 2
echo "le compteur est a $COUNT, la limite autorisee de compteur est $ENDCOUNT"
let COUNT=$COUNT+1
echo "Le nouveau compteur est a $COUNT"
done
#Fin du bloc d'instruction visant a recuperer l'adresse IP publique.
###############################################################################################################################
echo affichage IP Publique
echo $PUBIP
# creation du fichier de reference pubip
echo $PUBIP > $SCRP/pubip
echo $PUBIP > $SCRP/IPPUB.txt
###############################################################################################################################
# bloc d'instruction visant a informer l'administrateur que la recuperation est impossible le cas echeant.
if [ -z $PUBIP ]
then
echo " recuperation IP impossible"
mutt -a $SCRP/IPPUB.txt -s "recuperation IP impossible " adresse@domain.pf < $SCRP/IPPUB.txt
exit 0
else
echo "L'adresse IP Publique a pu etre recuperee. Il s'agit de $PUBIP "
fi
sleep 2
# fin du bloc. Attention, si la machine n'est pas reliee a Internet, le message ne partira jamais...
###############################################################################################################################
###############################################################################################################################
# Bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee. Si un changement s'est produit,
# alors $PUBIP sera differente de l'ancienne adresse qui se trouvera dans la variable $OLDPUBIP
case $PUBIP in
$OLDPUBIP )
echo "pas de changement"
;;
* )
echo "changement adresse effectue depuis le dernier test"
# Envoi du contenu du fichier dans une boite aux lettre.
# L'extension ".txt" est ici purement esthetique, bien que d un gout douteux.
mutt -a $SCRP/IPPUB.txt -s "IP publique modifiee - CLIENT " adresse@domaine.pf < $SCRP/IPPUB.txt
;;
esac
# Fin du bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee.
################################################################################################################################
sleep 2
# suppression des anciens fichiers index.html qui peuvent parasiter et s accumuler.
rm -f $SCRP/index.html*
rm ~/index.html*