Créer son propre Cloud – Partie 7 – Notification de changement d’IP

Edit: attention suite à une remarque d’un lecteur, j’ai fait une mise à jour de cet article disponible à cette adresse.

Lors de mes dernières vacances pendant 3 semaines aux USA, je me suis servi de mon Cloud pour sauvegarder mes photos régulièrement. Malheureusement à la fin de la deuxième semaine le TonidoPlug s’est mis à ne plus répondre. J’ai tout de suite soupçonné un renouvellement de l’adresse IP de ma NeufBox. Ce que mon enquête à mon retour a confirmée.

Normalement, pour ne pas m’embêter avec l’adresse IP, je passe par le service de DNS dyndns.org qui me permet un nom de domaine qui pointe toujours vers la bonne IP. La NeufBox possède un client qui se connecte à dyndns à chaque renouvellement d’IP et/ou redémarrage. Hélas ce dernier à l’air de ne plus fonctionner, le statut du service reste en attente indéfiniment.

Pour résoudre ce problème, j’ai créé un script python qui me tient informé par e-mail en cas de renouvellement d’adresse IP de ma box adsl.

Le fonctionnement du script est très simple. Il lance une boucle infinie qui chaque heure se connecte à un site web qui retourne l’adresse IP de la box. Il compare, ensuite, l’adresse IP retourné avec celle sauvegardé en mémoire. Si elles sont différentes alors le script m’envoie un email via mon compte gmail.

#!/usr/bin/python
 
'''
CloudIpChecker.py
 
Created on Aug. 10 2011
 
@author: Thomas Bores
'''
import urllib2
import time, datetime
import smtplib
 
from email.mime.text import MIMEText
 
saved_ip = None
 
while True:
    # Get current local time
    localtime = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
 
    # Connect to a website that returns the ip
    # Please avoid to overload my website, use your own
    url = 'http://www.bores.fr/ip.php'
    ip = urllib2.urlopen(url).read()
 
    if saved_ip != ip :
        #Save the new ip
        saved_ip = ip
 
        # Notice me by email about ip change
 
        # 1. Prepare mail content
        mailContent = localtime + "nIP changednNew IP is: " + ip
        msg = MIMEText(mailContent)
        print "IP changed, send a notification by email with the following content:"
        print mailContent
 
        # 2. Add a subject
        msg['Subject'] = 'Cloud has a new IP - '+ip
 
        # 3. Use my gmail account to send the mail
        mailServer = smtplib.SMTP("smtp.gmail.com", 587)
        mailServer.ehlo()
        # 4. Of course, we use a secure connection
        mailServer.starttls()
        mailServer.ehlo()
        mailServer.login('your_account@gmail.com', 'password')
        mailServer.sendmail('your_account@gmail.com', 'your_account@gmail.com', msg.as_string())
        mailServer.close()
    else :
        print "IP still the same"
 
    # Check every hour
    time.sleep(3600)

Ensuite il suffit de copier le script sur votre plug computer puis de l’exécuter depuis un terminal via SSH. Attention à bien utiliser la commande nohup pour ne pas que le script se termine à quand vous fermerez le terminal.

thomas@TonidoPlug:~$ nohup python CloudIpChecker.py

6 thoughts on “Créer son propre Cloud – Partie 7 – Notification de changement d’IP

  1. Mais ça veut dire que ton cloud peut rester inaccessible pendant une heure (voir plus si tu ne réagis pas de suite quand tu reçois le mail).
    Ça dépend l’utilisation dont tu en as mais ça peut être gênant non ? Surtout si comme moi, ton ip est renouvelée quasi toutes les 24h (allez ptete 36 max)

    • Tu peux configurer le temps de vérification en changeant le nombre de secondes dans la fonction sleep à la fin de la boucle, par contre je déconseille de descendre à moins de 5 min ( sleep(300) ), sinon tu vas surcharger le processeur de ton cloud, ton réseau et le serveur web qui te retourne ton IP. Mon IP est renouvelé assez rarement, ma box était allumé depuis plus de 30 jours avant que j’ai le renouvellement d’IP.

  2. Bonjour,

    si le script s’arrête pour raison x ou y il se passe quoi ?

    Je serai plus tenté de le lancer par une tâche cron.

    • Salut Polo, tu as entièrement raison, c’est d’ailleurs ce qui m’est arrivé, je vais donc corriger cet article prochainement. Merci.

Leave a Reply

%d bloggers like this: