Monitorare la connessione a internet con Linux



In questo tutorial vediamo come costruire un semplice script linux per monitorare costantemente lo stato della proprio connessione ADSL. E’ un programma che può tornare utile nei casi in cui si abbiano delle difficoltà con la connessione, per avere un riscontro oggettivo dei problemi e supportare meglio il provider stesso nella gestione del problema. Vediamo come fare passo passo.

1 – Monitoraggio

Per verificare se la connessione funziona bene utilizziamo un programma molto diffuso che si chiama curl. Curl è un semplice tool testuale che effettua una connessione a un qualcunque sito “come se” fosse un browser, restituendo come output il codice html ricevuto dal sito stesso. Tramite varie opzioni che possiamo passare al programma (vi assicuro che ce ne sono tantissime) è possibile filtrare il contenuto ricevuto, ad esempio (come faremo noi) stampando solo l’header del pacchetto ricevuto. La sintassi per il comando curl è questa:

curl --head --max-time 5 www.google.it

Abbiamo in questo caso utilizzato google come sito di test ma possiamo decidere in maniera arbitraria quale utilizzare. Prima di proseguire perfezioniamo il comando, inserendo delle modifiche volte a catturare solo la parte che ci interessa dell’header, ossia la riposta.

curl --head --max-time 5 www.google.it 2>/dev/null | head -1

In questo modo abbiamo soppresso tutti i messaggi di notifica e di errore, lasciando solo la risposta del server. Tale risposta è, nel caso vada tutto bene, una stringa del tipo “200 OK”. Anche se ci fosse un messaggio di errore, ad es. “404 Not found”, per noi va sempre bene perché significa che il server ci ha risposto, quindi la connessione è a posto. Quando la connessione non funziona bene, il comando restituisce una stringa vuota.

2 – Creazione file di log

Una volta avuta la risposta dobbiamo memorizzare il risultatao, possibilmente corredato da data e ora, a un opportuno file di log (ad esempio un file .csv). Per fare ciò possiamo utilizzare la seguente sintassi:

echo "`date "+%d/%m/%Y %H.%M.%S"`;`curl --head --max-time 5 www.tiscali.it 2>/dev/null | head -1`" >> /home/scuro/testrete/testadsl.csv

che ci permette di creare una riga da inserire in un file CSV, del tipo “14/02/2008 16.11.51;HTTP/1.1 200 OK” in caso di buona connessione, oppure “14/02/2008 16.11.51;” in caso di cattiva connessione.

3 – Esecuzione automatica

E’ bene mettere lo script in esecuzione automatica, ma purtroppo crontab permette esecuzioni ogni minuto come minimo, che è un po’ troppo per i nostri gusti. A noi serve una grana più fine, ad esempio 5 secondi. Per ottenere il risultato è meglio procedere diversamente: a ogni test facciamo uno sleep di 5 secondi, e ripetiamo ciclicamente. Però se facciamo così c’è il problema che, se per qualche motivo lo script dovesse andare in crash, perderemmo il monitoring della rete senza accorgercene. Per questo motivo è meglio mettere comunque lo script a crontab, però bisogna fare un controllo preventivo: dobbiamo verificare che non ci siano altre istanze del programma in esecuzione. Possiamo usare una sintassi simile a questa:

PROGRAM_NAME="`basename $0`"

NUM_PROC=`ps | grep -o -c $PROGRAM_NAME`
#echo $NUM_PROC

if [ $NUM_PROC -gt 2 ] ; then
echo "Programma in esecuzione"
exit 1
fi

che controlla se ci sono altre istanze del programma in esecuzione. In questo caso è statao stampato un messaggio a video in caso di programma già in esecuzione anche se è inutile, dovendo il programma girare poi a crontab.

4 – Mettiamo tutto insieme

Ecco come potrebbe essere lo script definitivo:

#!/bin/bash

PROGRAM_NAME="`basename $0`"

NUM_PROC=`ps | grep -o -c $PROGRAM_NAME`
#echo $NUM_PROC

if [ $NUM_PROC -gt 2 ] ; then
echo "Programma in esecuzione"
exit 1
fi

while true; do
echo "`date "+%d/%m/%Y %H.%M.%S"`;`curl --head --max-time 5 www.google.it 2>/dev/null | head -1`" >> /home/nomeutente/testadsl.csv
sleep 5
done

Un possibile output è questo:

...
14/02/2008 16.11.36;HTTP/1.1 200 OK
14/02/2008 16.11.41;HTTP/1.1 200 OK
14/02/2008 16.11.46;HTTP/1.1 200 OK
14/02/2008 16.11.51;HTTP/1.1 200 OK
14/02/2008 16.11.56;HTTP/1.1 200 OK
14/02/2008 16.12.01;HTTP/1.1 200 OK
14/02/2008 16.12.07;HTTP/1.1 200 OK
14/02/2008 16.12.12;HTTP/1.1 200 OK
14/02/2008 16.12.17;HTTP/1.1 200 OK
14/02/2008 16.12.23;HTTP/1.1 200 OK
...

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest