53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
import requests
|
|
import time
|
|
import os
|
|
import logging
|
|
from datetime import datetime, timedelta
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
|
# Variables
|
|
ip_version = os.getenv('DDNS_MYADDR_IP_VERSION') # 'ipv4' ou 'ipv6'
|
|
key = os.getenv('DDNS_MYADDR_KEY') # Récupère clé
|
|
check_interval = 15 * 60 # Intervalle de vérification de 15 minutes
|
|
no_update_limit = timedelta(days=30) # Limite de 30 jours
|
|
|
|
def get_public_ip():
|
|
if ip_version == 'ipv6':
|
|
response = requests.get('https://api64.ipify.org') # Appel pour IPv6
|
|
else:
|
|
response = requests.get('https://api.ipify.org') # Appel pour IPv4
|
|
return response.text.strip()
|
|
|
|
def update_ip(ip):
|
|
url = 'https://myaddr.tools/update'
|
|
data = {'ip': ip, 'key': key}
|
|
response = requests.post(url, data=data)
|
|
return response.text
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
last_ip = None
|
|
last_update_time = datetime.now()
|
|
|
|
while True:
|
|
public_ip = get_public_ip()
|
|
current_time = datetime.now()
|
|
|
|
if public_ip != last_ip: # Vérifie si l'IP a changé
|
|
result = update_ip(public_ip)
|
|
logging.info(f"IP mise à jour : {public_ip}, Réponse : {result}")
|
|
last_ip = public_ip # Met à jour l'IP
|
|
last_update_time = current_time # Réinitialise le temps
|
|
elif current_time - last_update_time > no_update_limit: # Vérifie si 1 mois sans mise à jour
|
|
result = update_ip(public_ip)
|
|
logging.info(f"Aucune mise à jour depuis un mois, IP envoyée : {public_ip}, Réponse : {result}")
|
|
last_update_time = current_time # Réinitialise le temps
|
|
|
|
else:
|
|
logging.info(f"Aucune mise à jour, l'IP reste la même : {public_ip}")
|
|
|
|
time.sleep(check_interval) # Pause de 15 minutes
|
|
|
|
except KeyboardInterrupt:
|
|
logging.info("Arrêt en cours...") |