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 changed\nNew 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('@gmail.com', '') mailServer.sendmail('@gmail.com', '@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