first commit
commit
b8cf309295
|
@ -0,0 +1 @@
|
||||||
|
.directory
|
|
@ -0,0 +1,14 @@
|
||||||
|
FROM alpine:3.20.0
|
||||||
|
|
||||||
|
ENV TZ=Europe/Paris
|
||||||
|
ENV DDNS_MYADDR_KEY=xxxxx
|
||||||
|
|
||||||
|
RUN apk update && apk add --no-cache tzdata curl wget python3 py3-pip
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
RUN mkdir -m 0777 -p /root/.config/pip && echo "[global]" > /root/.config/pip/pip.conf && echo "break-system-packages = true" >> /root/.config/pip/pip.conf
|
||||||
|
RUN pip install requests
|
||||||
|
|
||||||
|
COPY ./root /
|
||||||
|
RUN chmod a+x /start/*.sh
|
||||||
|
|
||||||
|
CMD ["/start/start.sh"]
|
|
@ -0,0 +1,49 @@
|
||||||
|
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
|
||||||
|
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():
|
||||||
|
response = requests.get('https://api.ipify.org')
|
||||||
|
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...")
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env ash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
python3 /app/ddns-myaddr.py
|
Loading…
Reference in New Issue