IP change log

22 Febbraio 2010

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