lunedì 28 marzo 2016

Se ci sei, batti un colpo


Salve,
rieccomi ancora qui, dopo una lunga pausa, a scrivere ancora qualche riga e un po' di codice nella speranza che possano essere di aiuto a qualcuno come è  stato per me.
Come al solito parto da una mia esigenza, un piccolo problema che, non conoscendo una soluzione altrettanto semplice e veloce di questa, ho risolto con uno script in python.

Quando si hanno dei pc connessi alla rete, specialmente quando questi offrono dei servizi e quindi fanno da server, può essere utile avere un quadro della situazione e conoscerne in modo automatico la raggiungibilità sulla rete.

Il codice che ho scritto parte dal presupposto che i pc/server da tenere sotto controllo rispondano al ping, così come  avviene normalmente se non si interviene manualmente per disattivare i pacchetti ICMP.

Per farla breve posto subito il codice e poi un breve commento.



#!/usr/bin/env python

import os
import time

# elenco di host da processare in formato nome (host : indirizzo ip)
myservers = {
'Server A' : '192.168.1.10',
'Server B' : '192.168.1.20',
'Server C' : '192.168.1.30',

}

count=0 # contatore dei check

while True:
 print('------------------')
 print('--- Up or Down ---')
 print('------------------')
 count+=1 # conta i check
 print 'Check:',count
 print 'Orario: ',time.strftime("%H:%M:%S")
 print('')
 for nomehost, indirizzoip in myservers.items(): 
     # esegue il ping per ogni host e memorizza in test il risultato dell' operazione
  test = os.system("ping -c 1 " + indirizzoip+" >> /dev/null") 
  if test == 0:
   # se il ping ritorna il valore 0 allora l' host e' raggiungibile
   result = nomehost+' - '+indirizzoip+' --  ONLINE' 
  else:
   # ogni valore diverso da 0 vul dire che l' host e' irraggiungibile 
   result = nomehost+' - '+indirizzoip+' ---------  OFFLINE' 
  print(result)
 
 time.sleep(600) # un po di riposo
 os.system('clear') # pulisce lo schermo del terminale e ricomincia



Iniziamo col definire l' elenco dei servers da controllare, nel dizionario che ho chiamato myserver sono presenti le coppie (nome host : indirizzo ip) che dovrete modificare inserendo i dati dei vostri pc.

Fatto questo il resto non è da modificare, e funziona così:

viene inizializzata una variabile count che servirà per contare i check e quindi stamparli a video così da controllare come procede il ciclo while, un ciclo infinito che controlla costantemente tutti i servers mediante un ciclo for.
Per ogni item presente del dizionario definito in precedenza viene effettuato un ping sull'indirizzo ip, se il risultato è uguale a 0 vuol dire che il ping è riuscito ad arrivare al server che ha risposto correttamente, viceversa se il valore è diverso da 0 vorrà dire che il server non ha risposto e quindi non sarà raggiungibile sulla rete.
Da notare che ho inserito di proposito nella stringa dei servers non raggiungibili dei trattini in più, proprio per metterli in evidenza qualora qualcosa non andasse a buon fine nel ping.

Questo è tutto,

Alla prossima!

2 commenti:

  1. come script per gioco ci può stare, ma esistono strumenti appositi come monit, nagios/checkmk o qualsiasi altro tool di monitoring. Tra l'altro nagios/checkmk può essere configurato per la connessione tramite ssh, quindi se anche il server non risponde al ping ma puoi farci ssh, non è un problema.

    RispondiElimina
    Risposte
    1. ok Giacomo, hai ragione ma ricorda che lo scopo principale di questi articoli è condividere esperienze, piccoli programmi e pensieri. Mi vine in mente una frase fatta ma vera : Giocando si impara!. Saluti :)

      Elimina