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 0Anche 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