Première version d'un script adapté et testé

This commit is contained in:
MJ Antipode 2024-12-19 23:48:16 +01:00
parent 2ba11a44b3
commit 98e0fa8236

107
Update_DDNS_OVH.ps1 Normal file
View File

@ -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)"
}