Tempo fa ho avuto dei grossi problemi di linea. Subivo dalle 3 alle 4 disconnessioni al giorno, dovute alla precarietà della linea internet nella mia zona. Dopo numerose chiamate al centro assistenza, nulla di fatto; insistevano dicendo che era il mio modem ecc ecc....al che ho deciso di dimostrare con carte alla mano tutti i cambi di IP che subivo durante la giornata ( cambi di IP = disconnessione dalla linea ADSL ). Mi serviva un programma che mi segnalasse, o meglio, che facesse lo storico delle disconnessioni. Una volta realizzato lo script e lanciato per 10 gg, ho raccolto circa 30 disconnessioni!. Finalmente si sono convinti a fare uscire un tecnico.... risultato? avevo il rapporto segnale/rumore più scadente della zona, dovuto appunto ad un gusto in centrale. Mi ci è voluto un pò ma alla fine ho risolto!
Parliamo ora dello script vero e proprio:
è composto da due parti, due script separati:
un file che controlla che ip abbiamo, collegandosi al sito http://checkip.dyndns.org
l'altro invece è il core vero e proprio; svolge le funzioni di confronto e di notifica del cambio di ip.
Nel mio caso il cambiamento di ip viene salvato in un file *.html e in uno *.txt che mi serve per altri scopi. Si può personalizzare per avvisare del cambio di ip via mail ad esempio.
Ecco il codice del primo, che chiamerò per comodità ip_check.sh:
#!/bin/bash
wget http://checkip.dyndns.org/ -q -O - | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>' > "/home/server/scripts/ip_reg/myip.txt"
Dovrete cambiare la directory di output impostandola secondo le vostre esigenze.
Vediamo ora il codice del core vero e proprio:
#!/bin/bash
# ##########################################################
# Name: IP Change log and notifier
#
# Distributed under the terms of GNU GPL version 3 or later
# Copyright (C) Luca Scalvi (luca.scalvi(a)yahoo.it)
# Date: 20090304
# Last updated: n/a
# version: 1.0
# ##########################################################
LOG=/home/server/scripts/ip_reg/ip_change.txt
#lancia lo script che verifica qual'è l'ip attuale
bash /home/server/scripts/ip_reg/my_ip.sh
OLD_IP=`cat $LOG`
y=`cat /home/server/scripts/ip_reg/myip.txt`
# salva l'ip corrente
echo $y > $LOG
# controlla se l'ip è cambiato
# se siamo stati disconnessi per un lungo periodo
if [[ -z "$OLD_IP" ]] && [[ "$y" ]]; then
# segnala cambio di ip
echo 'Nuovo IP per' `hostname` 'is:' $y 'on ' `date +"%Y-%m-%d %H:%M"`
echo `date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` 'is:' $y >> /home/server/scripts/ip_reg/ip_change_log.txt
# struttura file HTML
echo ''`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '' $y '' >> /home/server/www/ip_change_log.html
# se l'ip è cambiato dall'ultimo check
elif [[ "$OLD_IP" ]] && [[ "$y" ]]; then
if [ "$y" != "$OLD_IP" ]; then
# segnala cambio di ip
echo 'Nuovo IP per' `hostname` 'is:' $y 'on ' `date +"%Y-%m-%d %H:%M"`
echo `date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` 'is:' $y >> /home/server/scripts/ip_reg/ip_change_log.txt
# struttura file HTML
echo ''`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '' $y '' >> /home/server/www/ip_change_log.html
fi
fi
exit 0
Anche in questo caso l'output è personalizzabile. Questa è la versione standard. Mentre questa è la versione più carina. Non riporto tutto lo script ma solo la parta riguardante la struttura HTML:
echo ''`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '' $y '
' >> /home/server/www/sources/ip_change_log.html rm /home/server/www/afooter.html echo 'Ultima disconnessione: '`date +"%Y-%m-%d %H:%M"` '- IP: ' $y '' > /home/server/www/afooter.html Produce un risultato simile a questo: Demo
X
THE END