Accueil > Raspberry > Récupérer l’adresse IP de sa box internet

Récupérer l’adresse IP de sa box internet

Bon voilà, j’ai besoin de connaitre l’adresse IP public de ma box internet afin de pouvoir accéder à mon Raspberry à distance via internet. Or l’adresse IP est dynamique donc elle est amenée à changer en fonction des opérateurs. Je sais, je sais il existe des services qui permettent de gérer cela (dyndns, no-ip…); mais pour des raisons que je ne vais pas expliquer, je veux m’en passer.

Le fonctionnement du programme est le suivant :

– toutes les heures mon Raspberry, récupère l’adresse IP publique de ma box via le site http://www.monip.org.

– Si l’adresse IP est modifié, j’envoi un mail qui contient la nouvelle adresse.

Le programme en python est le suivant :

#!/usr/bin/env python
# importation des librairies
import smtplib
import urllib
import os.path

# recuperation adresse IP publique
texte = urllib.urlopen("http://www.monip.org").read()
ip_public = texte.split(‘IP : ‘)[1].split(‘<‘)[0]

# importation des modules email
from email.mime.text import MIMEText

USERNAME = "xxxxxxxxx@gmail.com"
PASSWORD = "xxxxxxxxxxx"
MAILTO = "xxxxxxxx@gmail.com"
ip_file = "/etc/ipbox.txt"

if os.path.exists(ip_file):
    ip_box_file = open(ip_file,"r")
    ip_box_line = ip_box_file.readlines()
    old_ip_public = ip_box_line[-1]
    ip_box_file.close()
else:
    old_ip_public = ""
if old_ip_public.strip() <> ip_public:
    ip_box_file = open(ip_file,"w")
    ip_box_file.write(ip_public + "\n")
    ip_box_file.close()
    msg = MIMEText(‘Nouvelle adresse IP de ma box SFR : ‘ + ip_public)
    msg[‘Subject’] = ‘Adresse IP de ma box SFR’
    msg[‘From’] = USERNAME
    msg[‘To’] = MAILTO
    # parametres necessaires pour utiliser gmail
    server = smtplib.SMTP(‘smtp.gmail.com:587’)
    server.ehlo_or_helo_if_needed()
    server.starttls()
    server.ehlo_or_helo_if_needed()
    server.login(USERNAME,PASSWORD)
    server.sendmail(USERNAME, MAILTO, msg.as_string())
    server.quit()

Il suffit de renseigner les variables USERNAME, PASSWORD et MAILTO pour l’adapter à vos besoins.

Afin de pouvoir exécuter mon programme toutes les heures, je vais utiliser le service cron; pour cela je vais taper la commande ‘crontab –e’ et je vais ajouter la ligne suivante :

0 * * * * python /programmation/python/ipbox.py

En sachant que le nom de mon programme est ipbox.py et qu’il se trouve dans le dossier /programmation/python.

Catégories :Raspberry Étiquettes : ,
  1. 31/10/2013 à 19:19

    Très sympa et très pratique. Pour optimiser tout ça, je propose de faire en sorte que ce programme démarre au démarrage du raspberry Pi en rajoutant un fichier shellscript qui lance le programme. Et pour que le fichier shellscript se lance au démarrage, il faut modifier une ligne dans un fichier. Admettons que le fichier shellscript se nomme exemple.sh et qu’il se trouve sur ton Desktop. Alors ouvre le fichier /etc/xdg/lxsession/LXDE/autostart avec un éditeur de texte (VI va très bien) et il faut rajouter la ligne suivante: @/home/nom-d’utilisateur/Desktop/exemple.sh

    Comme ça, ton code python sera exécuter a chaque fois.

    En espérant avoir pu t’aider,
    Sven Borden

    P.S.
    Juste pour te raccourcir le travail. Le shellscript devrait être écrit comme ça je pense:

    #!/bin/sh
    echo « Starting ipbox.py »

    if crontab -e 0 * * * * python /programmation/python/ipbox.py; then

    echo  » Started: [OK] »
    else
    echo « Strarted: [FAIL] »
    exit 1
    fi

    Aussi, le ‘@’ de la commande à rajouter plus haut sert à ce que le programme soit relancé tant qu’il plante. C’est pourquoi il y a un exit 1 dans le shellscript.

  2. Julien
    18/09/2014 à 21:09

    Bonjour,

    Tout d’abord un grand merci pour ce tuto.

    Après avoir pas mal galéré, ça fonctionne.
    Je viens partager avec vous mes problèmes et leurs solutions si jamais ça peut aider.
    Dans un premier temps, j’avais une erreur d’encodage que j’ai réglé en ajoutant la ligne suivante au début juste après #!/usr/bin/env python :
    # -*-coding:Utf-8 -*
    Puis j’ai eu un soucis de caractère donc j’ai été obligé de remplacer tous les ‘ par des ‘ (alt + 4), je sais que l’on ne voit pas beaucoup de différence mais pourtant il y en a une.

    Ensuite j’ai eu un problème de droit pour écrire le fichier ipbox.txt dans le répertoire « /etc/ » donc j’ai changé son chemin et je l’ai mis dans « /home/pi/ ».

    Un problème du côté de l’url aussi :
    Ce n’est pas « texte = urllib.urlopen(« http://www.monip.org").read() »
    Mais « texte = urllib.urlopen(« http://www.monip.org).read() »

    Concernant l’authentification Google, je fais partie de ceux qui utilise la double authentification donc si vous êtes comme il ne faut pas utiliser le mot de passe de votre compte mais un autre qui sera fait uniquement pour cette « application ».
    Plus d’info ici : https://support.google.com/accounts/answer/185833

    Et lorsque je suis dans le dossier contenant mon script python je fais : python envoiIpBox.py
    Et je reçois bien le mail.

    Par contre je pense avoir fais des truc inutile, car étant donné que j’ai vu sendmail dans le code je me suis qu’il fallait l’installer donc je l’ai fait sans le configurer mais je ne suis pas sûr de son utilité.

    Après j’ai des doutes au sujet du cron, on met « 0 * * * * python /programmation/python/ipbox.py »
    Mais ça ne serais pas plutôt « 0 * * * * pi /programmation/python/ipbox.py »
    pi étant mon nom d’utilisateur.
    Car sur le net j’ai trouvé ça : #minute heure date mois jour utilisateur commande
    Et dans mon fichier crontab j’ai : # m h dom mon dow command
    Donc je ne suis sûr de rien.

    Et est-ce que vous connaissez une méthode afin de s’assurer que mon cron se lance au démarrage et tourne bien par la suite car je n’ai rien trouvé de concluant jusqu’à maintenant.

    En vous remerciant pas avance des réponses que vous pourrez me donner.

    Cordialement,

    Julien.

  3. kevin
    01/06/2016 à 12:43

    Bonjour,
    Merci pour ce partage.
    Bonne continuation.

  4. Adrien
    28/01/2017 à 15:47

    Bonjour,
    Merci de votre aide, cela va m’être bien utile !
    Adrien.

  5. lougrat jp
    22/03/2017 à 10:53

    Bonjour,
    Un grand merci pour ce tuto, je suis vraiment débutant dans le domaine et je suis arrivé à envoyer un mail avec mon Raspberry «  » Hourra !! «  ».
    J’ai tout de même un soucis, Google bloque se mail et me demande d’ouvrir l’accès aux opérations mois sécuriser, ce qui ne me plait pas beaucoup.
    Est-il possible de créer une exception ou de rendre le mail sécurisé ?

  6. Jean-Pierre PACAUT
    14/04/2018 à 11:45

    bonjour,
    merci pour ce tuto
    j’ai bcp galéré et je voulais signaler un erreur de syntaxe dans la partie paramètres nécessaires:
    server = smtplib.SMTP(‘smtp.gmail.com’,587)
    Bon courage à tous

  7. Jean-Pierre PACAUT
    25/04/2018 à 15:41

    bonjour,
    impossible de faire fonctionner crontab
    je galère depuis des jours et des jours
    j’ai essayé différentes syntaxes et rien ne fonctionne

  8. Magic
    25/03/2019 à 12:19

    Bonjour,
    Merci pour ce script.
    Je recontre une difficulté, mon IP est bien récupérée et inscrite dans le fichier, par contre il me l’envoie par mail alors que celle-ci n’a pas changée.
    Pouvez-vous m’aider, svp? Je voudrai recevoir le mail que si l’adresse IP a changé.

    Merci

    Cordialement,

  9. Franck
    25/03/2019 à 23:28

    Bonjour,

    Merci pour ce script, cependant après avoir rectifié les ‘ et autres cf. commentaires ci-dessus. Le script fonctionne très bien l’adresse IP est inscrite dans le fichier et le mail est envoyé. Par contre lorsque l’IP ne change pas et que j’exécute le script le mail est quand meme envoyé alors qu’il ne devrait pas.
    Pouvez-vous m’aider, svp?
    Merci

    Cordialement,

  10. Franck
    27/03/2019 à 22:10

    Merci beaucoup, votre script fonctionne parfaitement !!!

  1. No trackbacks yet.

Répondre à Franck Annuler la réponse.