Uppdatera ditt dynamiska DNS med Powershell-skript
Uppdaterad
Powershell-skript för att uppdatera din dynamiska IP-adress.
Många enheter som routrar och brandväggar kan idag uppdatera din dynamiska IP-adress mot internet. Detta brukar dock kräva att man använder någon av de fördefinierade tjänsterna. Om man använder en annan tjänst brukar man få ha ett skript eller program som gör jobbet.Här ska jag visa ett skript i Powershell.
Skriptet hämtar din IP-adress och kollar om den ändrats (från när du körde skriptet sist). Sedan skickas uppdateringen till din tjänst och till sist sparas en temp fil med IP-adressen (som används för att kolla om IP-adressen har ändrats).
Ladda ner
CustomDDNS.zip 1.3kBAnvändning
Detta skript använder en PHP sida för att få reda på den dynamiska IP-adress mot internet. (Sidan visar endast IP-adressen som text.)Spara och redigera variablerna i detta Powershell-skript.
Lägg sedan in det i schemaläggaren för körning i lämplig intervall på en dator som ständigt är på.
Powershell-skriptet har en parameter -force för att tvingad uppdatering.
Variabler
$DDNSdomain URL till DDNS tjänsten.$DDNSurl DDNS tjänstens uppdaterings sträng efter domännamnet.
$user Användarnamn.
$password Lösenord.
$hostname Domänen som ska uppdateras.
$myipurl URL till myip.php.
PHP skript
- Kod: Markera allt
<?php header('Content-type: text/plain'); $myip=$_SERVER['REMOTE_ADDR']; echo $myip; ?>
Powershell-skript
- Kod: Markera allt
Param([Parameter(Mandatory=$false)][switch]$force) <# DDNS update script for custom DDNS script: CustomDDNS.ps1 version: 1.0.0 update: 14-07-04 code: Andreas Tunberg DDNS string exemple from binero https://[user]:[password]@dyndns.binero.se/nic/update?hostname=[hostname]&myip=[ip] #> $DDNSdomain="https://dyndns.binero.se" $DDNSurl="/nic/update?hostname=[hostname]&myip=[ip]" $user="username" $password="password" $hostname="exemple.com" $myipurl="http://exemple.com/myip.php" # Get IP address try { $webclient = New-Object System.Net.WebClient $ip = $webclient.DownloadString($myipurl) } catch { Write-host "Could not load the page. (Check url)" exit 1 } # Validating IP address $isValidIP = ($ip -As [IPAddress]) -As [Bool] if (!$isValidIP) { Write-host "Fetched IP address is not valid" exit 2 } # Check if ip has change, if not forced to change $tempfile = ([IO.Path]::GetTempPath()+ "CustomDDNS.ip") if (!$force) { try { if (Test-Path $tempfile) { $oldip = Get-Content $tempfile if($ip -eq $oldip){ Write-host "nochg" exit 0 } } } catch { Write-host "Could not read tempfile" } } # Prepare DDNS url $DDNSurl = $DDNSurl -Replace "\[hostname\]",$hostname -Replace "\[ip\]",$ip # Send update to DDNS try { $credCache = new-object System.Net.CredentialCache $creds = new-object System.Net.NetworkCredential($user,$password) $credCache.Add($DDNSdomain, "Basic", $creds) $webclient.Credentials = $credCache $webclient.Headers.Add("user-agent", "Powershell webclient") $result = $webclient.DownloadString($DDNSdomain + $DDNSurl) } catch { Write-host "Unable to log in to update DDNS. (Check domain,url,user or password)" exit 3 } # Save IP address to tempfile try { $ip | Out-File $tempfile } catch { Write-host "Could not write tempfile". } # OutPut Write-host $result exit 0