Un semplice analizzatore della rete su Raspberry Pi (per noob)

closeQuesto articolo è stato pubblicato 6 mesi 17 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi.

Il progetto che realizzeremo insieme in questo post mi è servito in ufficio, anzi, nelle sedi remote, per capire un po’ com’è lo stato della rete di un singolo punto rete. Se perde pacchetti, se la VPN con la sede funziona e a quanto va Internet. Il tutto da dare a qualcuno che di tecnologia non capisce nulla: lo collega, lo accende e fa la foto del risultato.

Il sistema in funzione. Prima senza cavo e poi con.

Lista della spesa

Per poter realizzare il progetto servono anche degli accessori che saranno usati solo per la configurazione

  • Monitor esterno HDMI
  • Tastiera USB
  • Un PC di appoggio
  • Un adattatore per collegare la microSD al PC

La prima cosa da fare è Scartare tutto il materiale e montare il display sulla scheda Raspberry Pi. Mi raccomando, è necessario mettere i distanziatori neri e assicurarsi che il display sia connesso in modo corretto al GPIO

Verificare l’allineamento dl connettore con il GPIO
Mettere i distanziatori (così non flette)

Il passo successivo è l’installazione del sistema operativo. Dalla sezione Download del sito Raspberry Pi scaricare la Raspbian Lite (quando il post è stato scritto la versione disponibile è la Stretch). Ottenuta l’immagine zippata (compressa) è necessario scriverla sulla scheda SD. Per fare questo ho scoperto Etcher, gli si passa l’immagine, si dice qual è la scheda SD e lui fa tutto. C’è per ogni sistema operativo. Insomma, davvero facile.

Importante: fare attenzione a dove si avvia la scrittura, se ci sono collegati al PC una chiavetta USB e la microSD, se si sceglie il dispositivo sbagliato, la chiavetta USB sarà completamente sovrascritta!

Fatto? Bene, adesso è necessario collegare il Raspberry Pi ad un monitor sulla porta HDMI, una tastiera su una delle USB, il cavo di rete (collegato ovviamente ad una rete funzionante) e infine, solo alla fine, all’alimentazione. Attendere il completamento della procedura di avvio prima di fare qualsiasi cosa (ci va qualche minuto). Quando la scheda è pronta compare

raspberrypi login:

Adesso è necessario accedere. Utente pi e password raspberry. Tutto minuscolo (punto escluso). Siamo dentro!

Adesso serve fare alcune operazioni per permetterci poi di accedere al sistema da remoto senza mantenere collegati monitor e tastiera, cosa molto più comoda. Il “$” davanti ad ogni comando indicato qui i seguito è il simbolo del prompt, non va scritto. Ogni riga che inizia con “$” è un comando. Iniziamo con il comando

$ ip a

Con questo comando si scopre qual è l’indirizzo IP al quale ci si dovrà collegare da remoto. La riga in questione è nella sezione 2: eth0

$ inet 192.168.1.100/24

A noi serve l’indirizzo, quindi i quattro gruppi di numeri, escluso il /24. Questo indirizzo è da segnare da qualche parte.

L’indirizzo è anche disponibile nell’elenco di messaggi che si vede all’avvio, una delle ultime è

My IP Address is 192.168.1.100

Adesso serve fare qualche configurazione. Si inizia con il comando

$ sudo raspi-config

Potrebbe essere necessario reinserire la password raspberry per continuare. Potrebbe esserci un problema di tastiera, sulla tastiera italiana il segno “-” lo si ottiene con il pulsante dell’apice ” ‘ “. Nel menu ci si sposta con le frecce, si conferma con l’INVIO e ci si sposta tra i pulsanti con il TAB

  • Cambiare la password dell’utente pi con una nuova, che non ci si dovrà mai dimenticare (attenzione alla tastiera! I simboli sono quelli della tastiera US e non quelli della IT)
  • Interfacing Options: abilitare SSH
  • Uscire dal menu di configurazione.

Per accedere al raspberry è necessario usare il protocollo SSH, un buon gestore che uso con soddisfazione è Termius (ci sono le versioni per qualunque sistema operativo, anche per gli smartphone). Il programma chiede se si vuole fare un account con il quale sincronizza i dispositivi e le relative password salvate, se non si vuole c’è un piccolissimo “continue witouth account” in basso. Una volta aperto il programma aggiungere l’host e mettere l’indirizzo recuperato prima. Collegarsi in remoto. Accettare la RSA Fingerprint.

Abbiamo la connessione al Raspberry! Da questo momento non saranno più necessari monitor e tastiera, ma solo alimentazione e cavo di rete.

Come prima cosa sono necessari alcuni comandi per concludere con le configurazioni. Aggiorniamo il sistema, ci vorrà un po’ di tempo. La tastiera in sessione SSH sarà quella italiana, così non ci sono problemi con i simboli.

$ sudo apt-get update
$ sudo apt-get upgrade

Adesso è necessario configurare il fuso orario e, se non si vuole il sistema in Inglese, anche la lingua italiana.

$ sudo raspi-config
  • Localization Options
  • Change Locale (solo se vuole il sistema in Italiano), scorrere con le frecce o PagSu/PagGiu fino a trovare it_IT.UTF-8 e selezionarlo con la barra spaziatrice (comprare un asterisco), poi OK. Selezionare come default it_IT.UTF-8, confermare e attendere il rientro al menu principale
  • Localization Options
  • Change Timezone
  • Europe
  • Selezionare Rome
  • Al menu principale selezionare Update e attendere il termine dell’aggiornamento, se necessario
  • Finish

Verificare a questo punto la correttezza del fuso orario con il comando

$ date

A questo punto la scheda è pronta per fare qualunque attività. Proseguendo adiamo a fondo nel progetto relativo a questo post.

Il lavoro e il codice sono scritto in Python, per alcune funzionalità del progetto sono necessarie delle librerie che si installano con l’installer “pip”, che ovviamente non è installato di serie nel sistema. Quindi, è sufficiente installarlo.

$ sudo apt-get install python-pip

Dopo verrà usato, per adesso si possono installare le librerie e gli esempi del display

$ curl https://get.pimoroni.com/gfxhat | bash 

Confermare sia l’installazione che la “full install”. Attendere poi il termine dell’installazione, ci va qualche minuto.

Ok, adesso è tutto pronto per fare un test. I programmi di demo sono nella cartella appena creata, basta accederci

$ cd /home/pi/Pimoroni/gfxhat/examples

Con cosa cominciare se non il classico Hello World?

$ python hello-world.py

Funziona!

Altre librerie da installare. Questa è per recuperare i dati dell’interfaccia di rete

$ pip install netifaces

Poi è necessario installare il client di speedtest per verificare la velocità della connessione

$ sudo apt-get install speedtest-cli

Il codice Python si trova, come di consueto, nella mia pagina Github

Per testare il programma questo va salvato in una cartella, solitamente all’interno della home /home/pi e poi va eseguito con il comando

$ python controllo_rete.py

Si vedrà il display accendersi con sfondo bianco per poi vedere i vari test in esecuzione su sfondo blu. Al termine del programma, per spegnere il display e fare modifiche sul codice è sufficiente premere Ctrl+C

Ma come si fa per avviarlo all’avvio del sistema, senza che l’utente deba fare nulla se non collegarlo e accenderlo? E’ necessario mettere una riga all’interno del Crontab, lo schedulatore di Linux.

$ crontab -e

La prima volta che viene lanciato il sistema chiederà che editor usare. Facciamo le cose facili e scegliamo quello proposto di default: Nano.

Adesso si deve aggiungere una riga in fondo

@reboot /home/pi/[percorso]/controllo_rete.py > /dev/null 2>&1

Salvare il file con Ctrl+S e uscire con Ctrl+X. Chiudere tutte le sessioni e spegnere il Raspberry. Adesso lo si può attaccare alla rete da testare e poi lo si alimenta. In pochi secondi arriverà il risultato.

Nota importante, da leggere prima di commentare

Questo è un blog scritto per passione, non fornisco quindi risposte di tipo professionale, se avete bisogno di un aiuto tecnico rivolgetevi ad un professionista di fiducia, non offendetevi se mi astengo dal rispondere. Vi ringrazio per la comprensione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.