sabato 9 maggio 2015

Restiamo in contatto grazie a python [Brevi esercizi]

Salve a tutti,
in questo articolo riporto un piccolo script in python nato per la necessità che ho avuto di restare "in contatto" con un pc collegato ad internet con un ip pubblico dinamico.


Cosa fà lo script?

Molto semplicemente lanciandolo inizia il suo lavoro che consiste in un loop infinito, lavorerà fin quando non lo fermeremo manualmente, e controllerà l'ip pubblico per rilevare variazioni. Se viene rilevato un cambiamento ci invierà una email comunicandoci il nuovo indirizzo.

Ma andiamo a vedere il codice e poi un breve commento.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib,smtplib,time

# Tempo di attesa in secondi tra due controlli
attesa = 600

# Parametri per invio email
destinatario = "email_destinataio@gmail.com"
mittente = 'email_mittente@gmail.com'
username = 'email_mittente@gmail.com'
password = 'password'

# Altre variabili
MemoriaIp=""
conta = 0

while True:
 conta += 1
 print "Controllo n. %i" % conta
 
 # Legge IP pubblico
 sock = urllib.urlopen("http://ipecho.net/plain")
 ReadIP = sock.read()  
 sock.close()   

 if ReadIP != MemoriaIp:
  # Comunica nuovo IP a video
  print "Rilevato nuovo IP %s" % ReadIP
  
  # Ricorda IP per verifica cambiamento
  MemoriaIp = ReadIP
  
  # Prepara variabili per email
  oggetto = 'Notifica IP %s' % ReadIP
  testo = 'Il tuo IP: %s' % ReadIP
  header  = 'From: %s\n' % mittente
  header += 'To: %s\n' % destinatario 
  header += 'Subject: %s\n\n' % oggetto
  msg = header + testo

  #Invia email 
  server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
  server.ehlo()
  server.login(username,password)
  server.sendmail(mittente, destinatario, msg)
  server.quit()
 time.sleep(attesa)

Nella parte iniziale troviamo le variabili generali, in particolare attesa è l'intervallo di tempo che passa tra due controlli, il valore è espresso in secondi quindi il valore 600 equivale a 10 minuti.

A seguire abbiamo le variabili con i dati dell' account del mittente e del destinatario delle email di segnalazione, compresi i parametri per l'autenticazione.

Come avrete notato  in questo esempio  ho usato degli indirizzi gmail, ho fatto questa scelta perchè  credo che siano tra i piu' usati ..... vabe' c'è anche da dire che era quello che serviva a me ;)
Cmq il tutto è , come sempre, facilmente personalizzabile.

Le altre variabili sono solo di servizio e quindi non hanno bisogno di ulteriori spiegazioni.

A questo punto inizia il loop che controlla l'ip leggendo il risultato del sito http://ipecho.net/plain che ci fornisce il nostro ip pubblico, lo memorizza e lo confronta con l'ultimo letto.

A questo punto se i due valori non coincidono vuol dire che il nostro indirizzo ip è cambiato e quindi parte il messaggio email che contiene il nuovo ip.

Questo e' quanto, piccolo script ma spero utile anche a voi.

Saluti!


8 commenti:

  1. Beh se stai in una lan e sei connesso tramine NAT la NIC ha un IP locale privato.

    RispondiElimina
  2. Và salvato con estensione .sh o .py ???

    RispondiElimina
    Risposte
    1. Questo commento è stato eliminato dall'autore.

      Elimina
    2. Se non sbaglio l'estensione non è necessaria una volta che lo rendi eseguibile con chmod.
      Anzi io le tolgo sempre.

      Elimina
    3. Si tratta di uno script python quindi l' estensione predefinita e' .py, naturalmente non e' per niente indispensabile , puoi anche non mettere niente .

      Come qualsiasi script puoi renderlo anche eseguibile con chmod +x .


      Elimina
  3. Utilissimo post, proprio quello che mi serviva e ve lo rubo. Volendo essere incontentabile si potrebbe integrare il numero ip in un dominio di terzo livello in modo che cliccando su mioip.miosito.it/owncloud uno automaticamente si connette al cloud del vostro post di qualche giorno fa oppure digitando al terminale putty mioip.miosito.it uno si connette al pc?
    Grazie

    RispondiElimina
    Risposte
    1. Scusami, non so se ho capito bene la domanda, cmq considera che il testo della email puo' essere poersonalizzato.
      Puoi fare in modo che nella email ti venga inviato il link al pc e al servizio in particolare.

      Elimina
    2. Ottima soluzione, non ci avevo pensato! :) tnx

      Elimina