Riconnessione automatica

Inserito da il 7 November 2006, 827 visite totali

Con la sempre maggiore diffusione delle connettività FLAT diventa quasi obbligatorio lasciare il pc acceso ed avere la connessione attiva, magari per complettare dei download.E’ risaputo che le connessioni molto spesso non sono molto stabili e si riscontrano delle disconnessioni più o meno frequenti.

Se ci si trova vicini al pc basta rieffettuare la connessione, ma se così non fosse ? Ci si trova a perdere delle ore “preziose di connettività“.

Questo script è stato scritto proprio per ovviare a questo inconveniente.

L’ uso dello script è molto semplice: basta copiare il testo sottostante in un file di testo con nome a scelta ad esempio autoconnect e dargli i permessi di esecuzione (chmod +x autoconnect)

#!/bin/bash
##* Script per riattivare la connessione quando viene perduta
##* Si basa su quanto scritto in /proc/net/dev
##* Autore : Pennega
##* Mail : pennega@gmail.com
##* Web : http://www.spaghettilinux.org
##* Versione : 0.5.8
##* Licenza : GPL
##* Ultima Modifica : 10-07-06
##* Features
##* Logga su file $Log
##* Verifica esistenza interfaccia $DEV
##* Può essere usato solo da root
##* Si rconnette anche quando c’è un traffico inferiore a $RCON o $TCON bit in $TIME sec
MAKER=`whoami`
#file di log
Log=”/tmp/autoconnect.log”
#comando per startare la connessione
STCON=”/sbin/wifi start”
#comando per stoppare la connessione
SPCON=”/sbin/wifi stop”
# tempo in secondi ogni quanto controllare la connessione
TIME=15
#interfaccia da monitorare
DEV=wlan0
TX1=0
RX1=0
TX2=0
RX2=0
#numero di bit minimo in ricezione e trasmissione
#che si ricchiedono per avere una navigazione in $TIME secondi
#il numero varia a seconda del tipo di connessione
#questi sono valori puramente casuali
RCON=100
TCON=100
#solo root può eseguire lo script
if [ “$MAKER” == “root” ]; then
    if [ ! -f “$Log” ]; then
        touch $Log
        chmod 666 $Log
        echo -e `uname -sr` `date` “File di Log creato da $MAKER \n” >>$Log
    fi
    #per il momento implemento un ciclo infinito ma si potrebbe inserire anche in crond
    while [ a==a ]; do
        #Controllo se l’ interfaccia esiste
        DEVC=`cat /proc/net/dev |grep $DEV |sed 's/:.*//'|sed 's/\ *//'`
        if [ “$DEVC” == “$DEV” ]; then
            #le variabili RX1e TX1 sono monitorate successivamente alle RX2 e TX2 dopo il 1 ciclo
            MON=`cat /proc/net/dev|grep wlan0|sed 's/.*://'` 
            RX1=`echo $MON | awk '{print $1}'`
            TX1=`echo $MON | awk '{print $9}'`
            (( RX2+=$TCON ))
            ((TX2+=$RCON ))
            if [[ $RX1 -lt $RX2 && $TX1 -lt $TX2 ]]; then
                echo -e `uname -sr` `date` “Fermo la connessione” >>$Log
                echo -e “\t Pacchetti ricevuti: $RX1 tramessi: $TX1″ >>$Log
                $SPCON sleep 2 echo -e `uname -sr` `date` “Riattivo la connessione \n” >>$Log
                $STCON
                sleep 2
            fi
            #senza questa istruzione si ha bisogno di effettuare 2 volte il ciclo prima di essere a regime:
            #la variabile $MON uttilizzata per valutare $RX2 e $TX2 una volta
            #eseguito l’ if avrà dei valori molto + alti rispetto alla $MON valutata
            #dopo $TIME sec in quanto il contenuto di /proc/dev/net viene
            #azzarato quanto viene stoppata la connessione questo era un bug
            MON=`cat /proc/net/dev|grep wlan0|sed 's/.*://'`
            RX2=`echo $MON | awk '{print $1}'`
            TX2=`echo $MON | awk '{print $9}'`
            sleep $TIME
        else
            echo -e `uname -sr` `date` “Intefaccia $DEV non trovata \n” >>$Log
            echo -e “\t\nInterfaccia di rete $DEV non trovata!!!”
            echo -e ”\tVerifica il tuo hardware e ritenta \n”
            exit 1
        fi
    done
    else
       echo -e “\n\tDesvi essere root per usare $0 \n”
fi

Una volta salvato il file è sufficiente eseguirlo in un teminale

./autoconnect

Si può anche copiarlo nel proprio $PATH in modo da averlo disponibile digitando semplicente il nome del comando.

Per eseguirlo in background è sufficiente aggiungere & dopo il nome dello script in modo da liberare la schell

autoconnect &

NB Le variabili per attivare e stoppare la connesione (STCON e SPCON) vanno personalizzate con i comandi che usualmente si usano per iniziare e fermare la connessione.

Molto importante è modificare la variabile DEV che deve contenere il nome del device di connessione (ad esempio eth0 per connessioni con scheda di rete, ppp0 per connessioni ppp ecc).

Si possono personalizzare anche altre variabili come il tempo di monitoraggio della connessione (TIME) e il file di log (Log).

Per chi non volesse fare il copia/incolla lo script è disponibile nel server FTP.

2 commenti per “Riconnessione automatica”

  1. Fabio scrive:

    Script perfetto, una sola domanda ,
    se le interfacce fossero di tipo dinamico es:tap111,tap123,tap132 e cosi via, come si potrebbe implementare?

  2. pennega scrive:

    Ciao fabio…scusa se rispondo solo ora :(
    Sinceramente non ho mai lavorato con interfacie dinamiche ma credo che si possa fare qualcosa tramite il comando route ed andare ad estrarre l’interfaccia di default, per farlo ci si può servire ad esempio di grep ed awk con un comando del tipo

    DEV=`route |grep default |awk ‘{print $8}’`

    ma comunque visto il tempo trascorso credo che tu abbia già trovato la soluzione, e se ne hai trovato una migliore prova a mandarcela 😉

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *