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.3kB

Anvä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



Publiserad
Uppdaterad


Inga kommentarer

Skriv en kommentar

Återstående antal tecken: 768

Uppdaterad: 2017-08-10 11:53
Copyright © 2009-2024 - tunisempire.com - All Rights Reserved RSS Feed Sitemap