#! /bin/sh
LOGIN=alpha573@aol.com
MDP=abcdef
HOST=alpha573.no-ip.org
function FAKE_ADD {
#$1 est l’adresse locale
RANDOM=$(date +%N)
local ADD
local i
for i in $(seq 1 4) ; do
local “NB$i”
let “NB$i = $RANDOM >> 7”
ADD="$ADD$((NB$i))."
done
ADD="${ADD%%.}"
# 1 chance out of 2^32 to have the same address...
if [ "$ADD" == "$1" ] ; then
ADD=$(FAKE_ADD "$ADD")
fi
echo "$ADD"
}
function TEST_SVR {
local REP
REP=$(ping -c 1 -w 2 “$1” |
grep “transmitted” |
sed -e ‘s/\(.\),\(.\),\(.\),\(.\)/\1\2/g’)
if [ “$REP” == “1 packets transmitted 1 received” ] ; then
return 0
else
return 1
fi
}
function MAJ_ADD {
local REP
local ERR
local _HOST
REP=$(curl -s "http://dynupdate.no-ip.com/dns?username=$LOGIN&password=$MDP&hostname=$HOST&ip=$1")
ERR=$(echo $REP | sed -e 's/\(.*\):\([0-1]*\)/\2/g')
_HOST=$(echo $REP | sed -e 's/\(.*\):\([0-9]*\)/\1/g')
case $ERR in
#pour les codes erreurs, voir http://www.no-ip.com/integrate/response
0 ) echo "MAJ inutile $HOST pointe deja vers $1";;
1 ) echo "MAJ achevee $HOST pointe maintenant vers $1";;
2 ) echo "HOST invalide";;
3 ) echo "MDP invalide";;
4 ) echo "LOGIN invalide";;
5 ) echo "Trop de requetes envoyees, MAJ bloquees pendant une heure";;
6 ) echo "Compte bloque, cause violation de clause";;
7 ) echo "ADRESSE IP invalide, $1";;
8 ) echo "Hostname bloque";;
9 ) echo "Hote configure comme lien vers un autre site…???";;
99 ) echo "Client desactive";;
* ) echo "Code erreur inconnu, valeur : $ERR";;
esac
#utile? pas sûr...
if [ "$_HOST" != "$HOST" ] ; then
echo "ATTENTION $HOST != $_HOST, mauvaise redirection!"
exit 2
fi
}
#DEBUT PROG PRINCIPAL
echo -n "Test des serveurs : "
if TEST_SVR checkip.dyndns.org && TEST_SVR dynupdate.no-ip.com ; then
echo "Serveurs OK"
OPTION=0
LOCAL_ADDRESS=$(curl -s checkip.dyndns.org |
grep "Current IP Address: " |
sed -e ‘s/\(.\): \([0-9]\).\([0-9]\).\([0-9]\).\([0-9]\)\(.\)/\2.\3.\4.\5/g’)
while getopts ":lahft-:" opt ; do
case $opt in
l | t ) OPTION=1;;
a ) OPTION=2;;
f ) OPTION=3;;
h ) OPTION=4;;
? | - ) case $OPTARG in
true | local ) OPTION=1;;
address ) OPTION=2;;
fake | false ) OPTION=3;;
help | * ) OPTION=4;;
esac;;
esac
done
if [ $OPTION -eq 1 ] ; then
echo “adresse detectee : $LOCAL_ADDRESS”
MAJ_ADD $LOCAL_ADDRESS
fi
if [ $OPTION -eq 2 ] ; then
#$2 contient dans ce cas l’adresse!
echo “adresse transmise : $2”
MAJ_ADD $2
fi
#option FAKE par defaut
if [ $OPTION -eq 3 ] || [ $OPTIND -lt 2 ] ; then
ADDRESS=$(FAKE_ADD $LOCAL_ADDRESS)
echo “adresse creee : $ADDRESS”
MAJ_ADD $ADDRESS
fi
if [ $OPTION -eq 4 ] ; then
echo “-a/–address X.X.X.X : forcer a une adresse precisee”
echo “-l|t/–local/–true : forcer a l’adresse locale”
echo “-h/–help : aide”
echo “-f/–fake/–false et choix par default : casser le lien reel”
fi
exit 0
else
echo “Serveur(s) DOWN, ABANDON”
exit 1
fi