Contrôle de staticité de l'adresse IP

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()

Bonjour,

Peux tu mettre en forme le script en le sélectionnant et en cliqant sur l’icône « </> ».
Merci.

A+

Fait. Effectivement c’est pluss bô comme ça ! Merci

Dans la même idée…
J’ai un serveur dédié avec plusieurs domaines, et je gère les DNS, avec Virtualmin.
Ma connection est dynamique, mais j’ai un serveur sur mon réseau, ce qu’il fait c’est que mon serveur maison contact a chaque heure le serveur web sur un RL précis, qui exécute un script PHP pour actualiser l’association du A NAME d’un host sur le IP actualisé.

Alors au lieu de définir et retenir une adresse IP, j’ai seulement un HOST à me souvenir.

J’ai rien inventé, c’est le principe qui existe depuis longtemps, avec dyndns.org et no-ip.com par exemple. Mais, je me suis fais mon système car;

  • J’ai une gestion de DNS existant sous un environnement avec un Web API.
  • Je peux effectuer le changement sans devoir installer ou coder de quoi sur le serveur, juste un CRON avec un wget sur un URL et un output sur le /dev/null (pratique si le serveur maison est « down », car avec le PC par exemple, par la visite du lien, actualise le IP également)
  • Cette manière travail par la détection du IP du visiteur de la page, dont le IP externe (assuré) de la connection. Ça contourne d’éventuelle mauvaise détection dut a divers facteurs qu’un réseau local peut produire
  • Je suis indépendant dans mes services (j’utilise pas un gestionnaire autre, j’ai un total contrôle)

J’en conviens, ce n’est pas tout le monde qui peut faire ça (qui à un domain à lui ?) et encore moins un serveur Web avec gestion de DNS « open ». Mais, un site Web hébergé et gratuit peut récolter l’information (accessible par mot de passe) dans le même principe, sans les gestions DNS, mais que l’afficher.

Bonjour,
Merci beaucoup pour le code, c’est très utile, il faut le reconnaître.

Super merci pour le partage du code très utile.