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.

Publicités
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.

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :