Bonjour,
Je suppose que je ne suis pas le seul à m’être posé la question de savoir si mon adresse IP, définie comme dynamique commercialement, l’était réellement ou si elle était statique. Et si elle était dynamique, je souhaitais qu’un mail me soit envoyé pour m’indiquer la nouvelle adresse pour que je mette à jour mes paramètres. J’ai donc construit un petit outil Python visant à répondre à cette question. Outil que je mets à votre disposition. Il récupère mon adresse IP publique, la compare à celle préalablement enregistrée et m’envoie un mail en cas de changement. Je l’ai injecté dans un enregistrement Cron qui le lance toutes les heures. Inconvénient : le mot de passe de l’adresse mail d’émission est codé en dur. N’hésitez pas à me faire part de vos remarques et répondez à ce message si vous utilisez cet outil.
#!/usr/bin/python3.7
import sys
print(sys.path.append('/home/pi/.local/lib/python3.7/site-packages'))
print(sys.path.append('/usr/lib/python3.7'))
import miniupnpc
import smtplib
from email.mime.text import MIMEText
import datetime
flag = ""
# Recuperation de l adresse IP publique
u = miniupnpc.UPnP()
u.discoverdelay = 200
u.discover()
u.selectigd()
ip = str(u.externalipaddress())
# Controle de correspondance des adresses IP
controle = open('/home/pi/ip.txt' , mode='r')
ipc = controle.read()
if ip != ipc:
# Emission d un mail
mail = MIMEText("L adresse IP publique a change. C est desormais :" + ip)
mail['Subject'] = "Changement d adresse IP"
serveur = smtplib.SMTP('smtp-mail.xxx.com', 587)
serveur.starttls()
serveur.login('xxx@xxx.com', 'mot-de-passe')
serveur.sendmail("cespedesfumagalli@hotmail.com", "yyy@yyy.net", mail.as_string())
serveur.quit()
flag = "nouvelle adresse"
# Mise a jour de ip.txt
controle.close()
controle = open('/home/pi/ip.txt' , mode='w')
controle.write(ip)
controle.close()
# Etablissement de la log
log = open('/home/pi/Controle adresse IP.log' , mode='a')
log.write(str(datetime.datetime.now()) + " " + str(ip) + " " + flag + "\n")
log.close()