catimimi Posté(e) le 10 novembre 2013 Posté(e) le 10 novembre 2013 Bonjour, Le petit script python "updatedns.py" ci dessous permet d'actualiser l'adresse IP de votre domaine géré par Gandi sans avoir recours à dyndns ou autre serveur. #!/usr/local/bin/python # -*- coding: UTF-8 -*- import xmlrpclib, urllib2, time, re, sys import logging logging.basicConfig(filename='/usr/local/bin/updatedns.log',level=logging.INFO) # API de Production api = xmlrpclib.ServerProxy('https://rpc.gandi.net/xmlrpc/') ######################### # URL de la page retournant l'ip publique url_page = 'http://ifconfig.me/ip' # Renseignez ici votre clef API générée depuis l'interface Gandi: apikey = 'xxxxxxxxxxxxxxxxxxxxxx' # Domaine concerné (à modifier) mydomain = 'xxxxxxxxxxxxxxxxxxxx' # Enregistrement myrecord = {'name': '@', 'type': 'A'} # TTL myttl = 300 # id de la zone concernée (à récupérer depuis l'interface Gandi) zone_id = xxxxxx # date et heure du changement d'IP asctime = time.asctime( time.localtime() ) #################################### # Récupération de l'ancienne ip oldip = api.domain.zone.record.list(apikey, zone_id, 0, myrecord)[0].get('value') try: # Récupération de l'ip actuelle f = urllib2.urlopen(url_page, None, 10) data = f.read() f.close() pattern = re.compile('d+.d+.d+.d+') result = pattern.search(data, 0) if result == None: print("Pas d'ip dans cette page.") sys.exit() else: currentip = result.group(0) # Comparaison et mise à jour si besoin if oldip != currentip: # On cree une nouvelle version de la zone version = api.domain.zone.version.new(apikey, zone_id) # Mise a jour (suppression puis création de l'enregistrement) api.domain.zone.record.delete(apikey, zone_id, version, myrecord) myrecord['value'] = currentip myrecord['ttl'] = myttl api.domain.zone.record.add(apikey, zone_id, version, myrecord) # On valide les modifications sur la zone api.domain.zone.version.set(apikey, zone_id, version) api.domain.zone.set(apikey, mydomain, zone_id) logging.info("Modification de l'enregistrement effectuée le : %s" % asctime) logging.info("avec l'adresse IP : %s" % currentip) except urllib2.HTTPError, xmlrpclib.ProtocolError: logging.info("Site indisponible.") finally: sys.exit() Il suffit d'installer le paquet python de synology, de renseigner les trois champs : apikey, zone_id et mydomain. Les deux premières valeurs sont à récupérer sur votre compte Gandi. Il faut pour ceci activer les API Gandi pour votre compte. J'automatise ce script par une tâche cron. Cordialement. Michel. PS : Ce script est une adaptation d'un script trouvé sur internet. 0 Citer
krick Posté(e) le 22 décembre 2013 Posté(e) le 22 décembre 2013 (modifié) Bonjour, Je suis très intérréssé par votre script mais tout d'abord je vous explique ma situation. Je possède un syno 410j auquel j'avais accés depuis l'extérieur sans problème tant que j'était chez bouygues (bbox), j'ai changé cette semaine d'opérateur je suis maintenant chez orange (livebox open) le paramétrage pour avoir à nouveau accés à mon syno de l'extérieur nécéssite avec cette opérateur d'avoir recours à dyndns mais possédant aussi un nom de domaine chez Gandi qui pointe vers mon syno je me dis qu'au lieu de ça je pourrai très utiliser votre script (si j'ai bien tout compris...) 1) J'acccéde à l'interface utilisateur de mon syno en local via son adresse ip mais où trouve-t-on le paquet python à installer? 2) Sur mon compte Gandi où puis-je trouver ces valeurs : apikey, zone_id ? de même pour activer les API comment fait-on? 3)"J'automatise ce script par une tâche cron" la, je nage complétement cette tâche est-elle réalisable si je suis sous mac osX sinon existe-t-il une équivalence ou solution alternative? Une fois ces 3 étapes réalisé connaissez vous les étapes à suivre sur l'interface de la livebox pour que la connexion à mon syno depuis l'exterieur refonctionne à nouveau? Merci pour ces précisions que vous pourriez m'apporter. Modifié le 22 décembre 2013 par krick 0 Citer
catimimi Posté(e) le 22 décembre 2013 Auteur Posté(e) le 22 décembre 2013 Bonjour, Tu auras toutes les réponses à tes questions ici : http://wiki.gandi.net/fr/xml-api/activate?s[]=activer&s[]=api Cordialement. Michel. 0 Citer
krick Posté(e) le 22 décembre 2013 Posté(e) le 22 décembre 2013 merci et bonnes fêtes. Cordialement. 0 Citer
Asimov67 Posté(e) le 3 août 2014 Posté(e) le 3 août 2014 Merci pour le script qui fonctionne bien sur mon pc machine Par contre je souhaite que celui-ci tourne 1 fois par jour directement sur mon synology DS211. J'ai bien installé le package Python mais apres je ne vois pas du tout comment scheduler mon script: ou le mettre sur le syno (dans quel dossier) Quelqu'un peut-il m'aider ? Merci Asimov 67 NB J'ai fait ce post ici car je n'ai pas trouvé mieux comme catégorie ... 0 Citer
PiwiLAbruti Posté(e) le 3 août 2014 Posté(e) le 3 août 2014 comment scheduler mon script: Avec le planificateur de tâche intégré au DSM (Panneau de configuration > Planificateur de tâches). ou le mettre sur le syno (dans quel dossier) Peu importe, du moment que ce n'est pas un dossier dont le contenu est écrasé par les mises à jour de DSM (/var/services/homes/admin/ par exemple). 0 Citer
Asimov67 Posté(e) le 3 août 2014 Posté(e) le 3 août 2014 Merci PiwiLabruti Pour Pour le scheduler je met juste le chemin au script ? par exemple "/var/services/homes/admin/Monscript.py" ? si je copie mon script dans le dossier que tu indiques . 0 Citer
PiwiLAbruti Posté(e) le 3 août 2014 Posté(e) le 3 août 2014 Non, il faut utiliser un chemin différent de façon à ce que ça ne fonctionne pas. 0 Citer
pews Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 Hello, J'ai mis en place ce script mais j'ai cette erreur à l'execution: sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory Quelqu'un peut m'aider ? 0 Citer
Fenrir Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 C'est parce que ton fichier n'est pas encodé comme il faut, en particulier les sauts de lignes, tu utilises le format Windows (^M ou CR LF) alors que tu devrais utiliser le format Linux (LF). 0 Citer
PPJP Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 De plus les paramètres sont inversés. On indique le path de python puis le fichier script à exécuter. La commande est donc : /usr/local/bin/python /var/services/homes/pews/updatedns.py Une remarque complémentaire: Ce script crée une nouvelle version de zone à chaque changement d'IP. Le n° de version risque donc de vite monter (je ne sais pas s'il y a une limite) 0 Citer
Fenrir Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 il y a 1 minute, PPJP a dit : De plus les paramètres sont inversés. Ils ne sont pas inversés, c'est le retour d'erreur qui l'affiche comme ça Il y a 3 heures, pews a dit : sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory shell du lancement script lancé ligne en erreur message d'erreur 0 Citer
PPJP Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 (modifié) Désolé de l'erreur d'interprétation. Mais la commande reste correcte. J’hésite généralement de poster des réponses de peur de commettre des erreurs de ce genre. Je vais continuer à hésiter, cela vaudra mieux! Tu as déjà assez de taf à répondre aux multiples posts, pour ne pas t'imposer de venir corriger mes erreurs Modifié le 26 juillet 2017 par PPJP orthographe 0 Citer
Fenrir Posté(e) le 26 juillet 2017 Posté(e) le 26 juillet 2017 Pas de souci, ça m'a donné un prétexte pour expliquer comme lire un message d'erreur de ce type et le reste de ton post était pertinent. 0 Citer
PPJP Posté(e) le 27 juillet 2017 Posté(e) le 27 juillet 2017 J'ai au moins appris quelque de nouveau à cette occasion! 0 Citer
PiwiLAbruti Posté(e) le 27 juillet 2017 Posté(e) le 27 juillet 2017 (modifié) Outre l'encodage du fichier, le chemin de l'interpréteur n'est pas bon : Il y a 11 heures, pews a dit : sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory Il me semble que /usr/local/bin/python était le chemin utilisé par DSM 5 et versions antérieures. Depuis DSM 6 c'est /bin/python : root@DiskStation:~# which python /bin/python ---------------------------------------------------------------- J'ai quand même vérifié les chemins. Donc /bin/python exécutera le script en version 2.7 : root@DiskStation:~# ll /bin/python* lrwxrwxrwx 1 root root 7 Jul 15 22:13 /bin/python -> python2 lrwxrwxrwx 1 root root 9 Jul 15 22:13 /bin/python2 -> python2.7 -rwxr-xr-x 1 root root 5556 Jul 13 00:19 /bin/python2.7 Pour les versions ultérieures, il faut utiliser /usr/local/bin/python{version} : root@DiskStation:~# which python3 /usr/local/bin/python3 root@DiskStation:~# ll /usr/local/bin/python* lrwxrwxrwx 1 root root 45 Jul 15 22:18 /usr/local/bin/python3 -> /volume1/@appstore/py3k/usr/local/bin/python3 lrwxrwxrwx 1 root root 47 Jul 15 22:18 /usr/local/bin/python3.5 -> /volume1/@appstore/py3k/usr/local/bin/python3.5 lrwxrwxrwx 1 root root 48 Jul 15 22:18 /usr/local/bin/python3.5m -> /volume1/@appstore/py3k/usr/local/bin/python3.5m root@DiskStation:~# ll /volume1/@appstore/py3k/usr/local/bin/python* lrwxrwxrwx 1 root root 9 Dec 8 2016 /volume1/@appstore/py3k/usr/local/bin/python3 -> python3.5 -rwxr-xr-x 2 root root 5588 Dec 8 2016 /volume1/@appstore/py3k/usr/local/bin/python3.5 -rwxr-xr-x 2 root root 5588 Dec 8 2016 /volume1/@appstore/py3k/usr/local/bin/python3.5m Le m de python3.5m indique que l'exécutable a été compilé avec pymalloc. Modifié le 27 juillet 2017 par PiwiLAbruti Complément d'information 0 Citer
hot22shot Posté(e) le 6 avril 2018 Posté(e) le 6 avril 2018 Bonjour, Quelqu'un à t-il testé avec l'API v5 de Gandi ? Suite à un changement d'ip intempestif de ma livebox j'ai voulu installer ce script, cependant il me semble qu'il n'est plus utilisable avec la v5 : en particulier lorsque j'ai voulu récupéré la zone id qui n'est plus exposé sur le site web de la v5. 0 Citer
PPJP Posté(e) le 6 avril 2018 Posté(e) le 6 avril 2018 Bonjour, Vous trouverez toutes les infos nécessaires à cette page http://doc.livedns.gandi.net/#work-with-domains Par exemple pour consulter les infos de vos zones (dont l'identifiant) la commande est: curl -H "X-Api-Key: $APIKEY" https://dns.api.gandi.net/api/v5/zones 0 Citer
hot22shot Posté(e) le 8 avril 2018 Posté(e) le 8 avril 2018 Pour ceux que ça intéresse j'ai bricolé un script python qui utilise l'API v5 de Gandi. Ce qu'il fait : 1- détermine la zone id a partir du domaine et de l'api key. 2- fait un snapshot de la zone. 3- modifie le @ de type A avec la nouvelle ip. Source : https://github.com/hot22shot/updategandidns Soyez indulgent, je n'ai jamais fait de python. N'hésitez pas à me faire part de vos remarques ! 0 Citer
Brenac Posté(e) le 25 mai 2018 Posté(e) le 25 mai 2018 Le 08/04/2018 à 12:56, hot22shot a dit : Pour ceux que ça intéresse j'ai bricolé un script python qui utilise l'API v5 de Gandi. Ce qu'il fait : 1- détermine la zone id a partir du domaine et de l'api key. 2- fait un snapshot de la zone. 3- modifie le @ de type A avec la nouvelle ip. Source : https://github.com/hot22shot/updategandidns Soyez indulgent, je n'ai jamais fait de python. N'hésitez pas à me faire part de vos remarques ! je regarde le sujet et toute la documentation gandi fait reference a la v4 (et, sauf erreur de ma part c'est sur l interface v4 que l'api est activable). Depuis Avril ton script 'v5' fonctionne t il bien ? Merci ! 0 Citer
PPJP Posté(e) le 25 mai 2018 Posté(e) le 25 mai 2018 Bonjour, J'utilise un script assez similaire depuis plusieurs mois, sans problème. Pour les infos sur la v5 suivre le lien que j'ai fourni quelques posts au dessus. 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.