Skip to content

Instantly share code, notes, and snippets.

@maelvls
Created February 24, 2013 00:00
Show Gist options
  • Save maelvls/5021927 to your computer and use it in GitHub Desktop.
Save maelvls/5021927 to your computer and use it in GitHub Desktop.
Pour garder un log des adresses IP sur une interface en particulier Je l'utilise pour étudier les attributions DHCP et comparer les débits liés
#! /bin/sh
# Cree par Mael Valais le 29 janvier 2013
#
# Traque les changements d'adresse IP sur une interface donnée
#
# Je m'en sers pour étudier les patterns d'ip du CROUS
# et mieux connaitre le plan du réseau
#
log="log" # Fichier vers lequelles sont enregistrées les IP
interface="en3"
rafraichissement=10 # En secondes
domaine="172\.1"
# Pour necho (notification echo) situé dans /usr/local/bin
# Lié à l'application terminal-notifier.app au meme endroit normalement
if ! which -s necho; then echo "necho non installé (lire à l'intérieur de $0)">&2; fi
# Pour le mode verbose
if [ "$1" = "-v" ]; then v=0; else v=1; fi
connexionOk() {
# On vérifie que l'interface donnée existe
if ! ifconfig -l | grep "$interface" > /dev/null; then return 1; fi
#On vérifie qu'une adresse IP est bien affectee à cette interface
if ! ifconfig $interface | grep "inet.*netmask">/dev/null; then return 2; fi
#On vérifie que le pattern du domaine existe
if ! ifconfig $interface | grep "inet.*netmask" | grep "$domaine">/dev/null; then return 3; fi
return 0
}
uneIpDansLog() {
# On vérifie que le fichier existe et qu'il est possible de le lire et de l'ecrire
if [ ! -f "$log" -o ! -r "$log" -o ! -w "$log" ]; then return 1; fi
# On regarde si il y a une adresse IP dans la derniere ligne
if ! cat "$log" | tail -1 | grep "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" > /dev/null; then return 2; fi
return 0
}
verifierIp() {
# On vérifie que l'interface est bien up et qu'on est dans le réseau crous
if ! connexionOk; then
if [ $v -eq 0 ]; then echo "Connexion $interface interronpue" >&2; fi
return 1;
else ip=`ifconfig $interface | grep "inet.*netmask" | cut -d " " -f 2`; fi
if [ $v -eq 0 ]; then echo "Adresse ip actuelle : $ip" >&2; fi
# On vérifie si il y a un log et si une IP est présente
if uneIpDansLog; then
if [ $v -eq 0 ]; then echo "$ip a été lue dans le fichier $log" >&2; fi
lastip=`cat $log | tail -1 | sed "s/.* \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/"`
else lastip="0.0.0.0"; if [ $v -eq 0 ]; then echo "Fichier $log non trouvé" >&2; fi; fi
# Ici $ip et $lastip ne sont pas nuls. Si $ip != $lastip on affiche.
if [ "$ip" = "$lastip" ]; then return 3; fi # l'ip n'a pas changé
echo $ip
necho "Nouvelle IP : $ip"
}
ip=`verifierIp`;
if [ $? -eq 0 -a "$ip" != "" ]; then echo "`date` : $ip" >> $log; fi
# On boucle
while sleep $rafraichissement
do
nouvip=$(verifierIp)
if [ $? -eq 0 -a "$ip" != "" ];
then echo "`date` : $nouvip" >> $log
fi
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment