Controllare la rete con Raspberry Pi e Python!

3

Eccomi dopo tanto, davvero troppo tempo ad aggiungere un articolo sul blog. Troppi impegni sono la causa della mia assenza quindi il poco tempo mi costringe a scegliere SE scrivere o SE smanettare con la tecnologia.
Di recente mi sono interessato allo studio del mio primo linguaggio di programmazione (tralasciando trascorsi adolescenziali con Visual Basic di cui ahimè ho perso ogni base) e quindi, grazie a codecademy.com ho cominciato ad apprendere l’utilizzo di Python se pur ancora moltissimi concetti non entrino (ma lo faranno!) ho creato il mio primo programma che mi permette di controllare ogni apparecchio connesso  alla mia rete domestica e determinare se sia attivo o disattivo e che mi informi del suo stato tramite e-mail.

Perchè ho scritto con Raspberry PI quando in realtà lo script funzionerà con qualsiasi macchina linux e mac? Semplicemente perchè il Raspberry è piccolo, consuma pochissima corrente e quindi è uno strumento che a differenza di un comune PC ha un incidenza piccolissima sulla bolletta se lasciato acceso 24/7.

Il progetto che ho deciso di condividere è adattato alle mie necessità, non utilizza per il momento una connessione SSL quindi non funzionerà con GMAIL come provider di posta (ma è fattibile), io lo sto utilizzando con il mailserver normale di deepred.es (richiede autenticazione ovviamente), per la verifica di ogni host mi sono ingegnato e ho deciso di eseguire un ping ad ogni host nel gruppo mynetwork e verificarne la risposta (sono convinto che ci siano metodi molto più semplici ma che ancora purtroppo non conosco), in base a questi dati il programma mi invierà un’e-mail con lo stato della rete. Sentitevi liberi di modificarlo a piacimento e fatemi sapere se vi torna utile in qualche modo!

Mail dall'applicazione

Mail dall’applicazione


#!/usr/bin/python2.7

import smtplib
import os
import StringIO

mynetwork = {
'Modem' : '192.168.1.1',
'Router' : '192.168.1.2',
'PABX' : '192.168.1.3',
'SecurityCam' : '192.168.1.5',
'Raspberry' : '192.168.1.7',
'HP Printer' : '192.168.1.8',
'XBOX 360' : '192.168.1.9',
'iMac' : '192.168.1.10',
'NAS' : '192.168.1.11'
}

def host_check():
message = StringIO.StringIO()
message.write('Subject: Raspberry\n') #Cambiare solo il valore Raspberry, non toccate Subject: e \n finale, sono essenziali!
message.write('NETWORK STATUS:\n')
for who, ips in mynetwork.items(): #Controllo tutti gli ip e verifico se sono online
isalive = os.popen('ping -c 2 ' + ips + '|grep "64 bytes"').read()
if isalive[0:2] == '64':
output = who + ' (' + ips + ') is up and running\n'
message.write(output)
else:
output = output = who + ' (' + ips + ') seems to be down\n'
message.write(output)
mail_sender = 'my@deepred.es' #Email mittente
mail_dest = 'another@deepred.es' #Email destinatario
mail_passwd = 'MyPaSSw0rD' #Password casella email
mail_msg = message.getvalue()
server = smtplib.SMTP('mail.myprovider.it','25') #Sostituire mail.provider.it con il vosto server mail
server.login(mail_sender, mail_passwd)
server.sendmail(mail_sender, mail_dest, mail_msg)
server.quit()
#print message.getvalue() #Decommentare questa e la prossima linea se volete vedere dell'output su terminale
#print 'Scansione Terminata'
message.close()

host_check()

 

Come ho premesso la pulizia del codice non è il massimo e qualche esperto potrebbe storcere il naso, ma come primo programma il focus è il funzionamento, e funziona! Per attivarlo da remoto ho prima dato i permessi di esecuzione al file (chmod a+x nomefile.py), sucessivamente è stato copiato su /usr/bin con il nome net_status, ho attivato un server web sul raspberry con un file .php al suo interno con il seguente contenuto


<?php
echo exec('net_status');
?>

Ora per attivarlo mi sarà sufficiente visitare la pagina http://mysupersecretdomainname/net.php e dopo pochi istanti riceverò la mail.

Troppo macchinoso? Come soluzione alternativa potete valutare l’inserimento in crontab del programma, così potrete programmare mail a determinati giorni e determinate ore a voi la scelta, buon testing!

3 Comments

  1. Ciao deepred,
    grazie per gli articoli, mi sei mancato.

  2. Salve,

    Sono molto interessato al tuo progetto, solo che non riesco a farlo funzionare… Non capisco cosa sbaglio…

    Può darmi una mano?

    Grazie mille

    • Ciao,
      Su che sistema operativo stai provando? Che errori ti da?
      Sono neofita di python ma se posso aiutarti volentieri

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: