From 98e0fa8236d635fb97424fa33da1eed90315e7ca Mon Sep 17 00:00:00 2001 From: MJ Antipode Date: Thu, 19 Dec 2024 23:48:16 +0100 Subject: [PATCH] =?UTF-8?q?Premi=C3=A8re=20version=20d'un=20script=20adapt?= =?UTF-8?q?=C3=A9=20et=20test=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Update_DDNS_OVH.ps1 | 107 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Update_DDNS_OVH.ps1 diff --git a/Update_DDNS_OVH.ps1 b/Update_DDNS_OVH.ps1 new file mode 100644 index 0000000..87f9836 --- /dev/null +++ b/Update_DDNS_OVH.ps1 @@ -0,0 +1,107 @@ +###################################################################################### +## Script Update_DDNS_OVH.ps1 +## Pure PowerShell, no external modules required +## Orig auth & date : The Nerd Cat 09/2021 +## Refactored by : mj and AI +## Added TLS 1.2 (minimum required for api calls), IPv6, OVH api URL and debug info. +## Needs one script and one pair of CREDS per subdomain ! +###################################################################################### + +# Variables - Setup part +$WORK_DIR = "C:\WORKDIR" +$LOGIN_OVH = "votre_login_dynhost@domaine.tld" +$PWD_OVH = "votre_mot_de_passe_dynhost" +$URL_OVH = "sousdomaine.domaine.tld" + +### No need to edit below ### + +# Forcer l'utilisation de TLS 1.2 +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + +# Variables - IP Wan (IPv4 et IPv6) +$ipv4_url = "https://api.ipify.org" +$ipv6_url = "https://api6.ipify.org" + +$webclient = New-Object System.Net.WebClient + +# Regex IP (IPv4 et IPv6) +$ipv4_pattern = "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$" +$ipv6_pattern = "^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$" # Regex IPv6 simple (peut être amélioré pour plus de précision) + +# Fonction pour mettre à jour OVH +function Update-OVHDDNS { + param( + [string]$ip, + [string]$ip_type + ) + + Write-Host "Mise à jour de l'adresse $ip_type chez OVH : $ip" + + $securepasswd = ConvertTo-SecureString $PWD_OVH -AsPlainText -Force + $cred = New-Object System.Management.Automation.PSCredential($LOGIN_OVH, $securepasswd) + + $majurl = "https://dns.eu.ovhapis.com/nic/update?system=dyndns&hostname=$($URL_OVH)&myip=$($ip)" + + try { + $result = Invoke-WebRequest -Uri $majurl -Credential $cred -UseBasicParsing + Write-Host "Mise à jour OVH réussie pour $ip_type. Réponse OVH : $($result.Content)" + Set-Content -Path "$WORK_DIR\maj_${ip_type}_ip.txt" -Value $ip + } catch { + Write-Error "Erreur lors de la mise à jour OVH pour $ip_type : $($_.Exception.Message)" + Write-Error "Détails de l'erreur : $($_.Exception | Format-List -Force | Out-String)" + } +} + +# Vérification de l'espace de travail +if (!(Test-Path $WORK_DIR)) { + Write-Host "L'espace de travail n'existe pas, création..." + New-Item $WORK_DIR -ItemType Directory + Set-Content -Path "$WORK_DIR\maj_ipv4_ip.txt" -Value "0.0.0.0" + Set-Content -Path "$WORK_DIR\maj_ipv6_ip.txt" -Value "::" # Valeur par défaut pour IPv6 +} + +# Traitement IPv4 +try { + $WANIPv4 = $webclient.DownloadString($ipv4_url).Trim() + if ($WANIPv4 -match $ipv4_pattern) { + $IPv4 = Get-Content -Path "$WORK_DIR\maj_ipv4_ip.txt" -ErrorAction SilentlyContinue + if (-not $IPv4) { + $IPv4 = "0.0.0.0" + } + if ($WANIPv4 -ne $IPv4) { + Write-Host "** Votre adresse IPv4 a changé **" + Write-Host "Nouvelle IPv4 : $WANIPv4" + Write-Host "Ancienne IPv4 : $IPv4" + Update-OVHDDNS -ip $WANIPv4 -ip_type "ipv4" + } else { + Write-Host "Votre adresse IPv4 n'a pas changé." + } + } else { + Write-Warning "L'adresse IPv4 récupérée ($WANIPv4) n'est pas au bon format." + } +} catch { + Write-Warning "Impossible de récupérer l'adresse IPv4 publique : $($_.Exception.Message)" +} + +# Traitement IPv6 +try { + $WANIPv6 = $webclient.DownloadString($ipv6_url).Trim() + if ($WANIPv6 -match $ipv6_pattern) { + $IPv6 = Get-Content -Path "$WORK_DIR\maj_ipv6_ip.txt" -ErrorAction SilentlyContinue + if (-not $IPv6) { + $IPv6 = "::" + } + if ($WANIPv6 -ne $IPv6) { + Write-Host "** Votre adresse IPv6 a changé **" + Write-Host "Nouvelle IPv6 : $WANIPv6" + Write-Host "Ancienne IPv6 : $IPv6" + Update-OVHDDNS -ip $WANIPv6 -ip_type "ipv6" + } else { + Write-Host "Votre adresse IPv6 n'a pas changé." + } + } else { + Write-Warning "L'adresse IPv6 récupérée ($WANIPv6) n'est pas au bon format." + } +} catch { + Write-Warning "Impossible de récupérer l'adresse IPv6 publique : $($_.Exception.Message)" +}