Created
February 24, 2013 00:00
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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