Quantcast
Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Script zur Prüfung ob die DynDNS aktuell ist

Alex

Administrator
Teammitglied
Registriert
10. Januar 2012
Beiträge
21.392
Lösungen
9
Reaktionspunkte
30.291
Punkte
1.113
Ort
Paradise City
Es gab die Anfrage, ob DDDNsupdater2.sh selbständig merkt, ob sich die öffentliche IP des Servers geändert hat.
Da dem nicht so ist habe ich ein separates Script geschrieben, das wenn die beiden IPs differieren, via DDNSupdater2.sh die DynDNS updatet
Voraussetzung für das Script ist logischerweise das installierte Addonscript DDNSupdater2.sh. Sollte aber auch mit DDNSupdater.sh funktionieren.

Das Script ist so geschrieben, das die DynIP nur einmal abgefragt wird und danach in eine Datei geschrieben wird. Dann wird der Inhalt der Datei mit der öffentlichen IP verglichen.
Sollte hier ein unterschied sein, wird die DynDNS aktualisiert und die Neue IP in die Datei geschrieben. Sollte kein Unterschied sein, wird nach einer Minute wieder neu verglichen.
Den Umweg über die Datei habe ich gemacht, damit man beim Anbieter nicht jede Minute anfrag und ggf. den Account wegen Abuse wieder freischalten muss.

Zuerst muss noch das Paket w3m installiert werden:
Code:
apt-get install w3m

So wird das Script eingebaut:
Code:
nano /var/emu/script/ip-check.sh

dort den inhalt des Spoilers einfügen, dann mit STRG+O speichern und mit STRG+X beenden
ip-check.sh:
Code:
#!/bin/bash
#Script zur Prüfung der Aktualität der DynDNS by al-x83 V1
DDNSHOST="my.dyndns.com"

#Aktuelle IP ermitteln:
CURRENTIP=`w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'`

function dyn_ip () {
    DYNIP=$(ping -c1 "${DDNSHOST}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
    if [ -f "/tmp/.dynip" ]; then
        rm /tmp/.dynip
    fi
    echo $DYNIP >> /tmp/.dynip
}

if [ -f "/tmp/.dynip" ]; then
    DYNIP=$(cat /tmp/.dynip)
else
    dyn_ip
fi

if [ "${DYNIP}" != "$CURRENTIP" ]; then
    echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind ungleich"
    /var/emu/script/DDNSupdater2.sh now
    sleep 20
    dyn_ip
else
    echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
fi

Bei Zeile 3 muss natürlich die eigenen DynDNS eigetragen werden

Ich habe einen Pro Account bei Dyndns.org und habe bei der getesteten Dyn-Adresse TTL auf 20 Sekunden gerabgesetzt, so kann man die Prüfung jede Minute per Cron durchführen lassen.
Allerdings habe ich keine Ahnung wie es bei anderen Anbietern ist, deshalb ggf. den Job nur alle 2 Minuten (bei TTL = 60) ausführen lassen, dafür aber das sleep 20 aus der Datei entfernen.

Nun muss das ganze noch in i jobs eingetragen werden:
bei TTL=20
Code:
* * * * * root /var/emu/script/ip-check.sh  #IP Ableich jede Minute
bei TTL=60
Code:
*/2 * * * * root /var/emu/script/ip-check.sh  #IP Ableich alle 2 Minuten

Danach auch wieder mit STRG+O speichern und mit STRG+X beenden

Nach dem der Wunsch geäußert wurde, mehrere Adressen mit einem Script zu prüfen, hier ein modifiziertes Script:
Code:
#!/bin/bash
#Script zur Prüfung der Aktualität der DynDNS by al-x83 V 2.00
#Jetzt mit mehreren DynDNS
DDNSHOST["1"]="my.dyndns1.com"
DDNSHOST["2"]="my.dyndns2.com"
DDNSHOST["3"]="my.dyndns3.com"
DDNSHOST["4"]="my.dyndns4.com"
DDNSHOST["5"]="my.dyndns5.com"
counter=1

#Aktuelle IP ermitteln:
CURRENTIP=`w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'`

function dyn_ip () {
    DYNIP=$(ping -c1 "${DDNSHOST[$counter]}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
    if [ -f "/tmp/.dynip" ]; then
        rm /tmp/.dynip
    fi
    echo $DYNIP >> /tmp/.dynip
}

for index in ${!DDNSHOST[*]}; do

        if [ -f "/tmp/.dynip" ]; then
                DYNIP=$(cat /tmp/.dynip)
        else
                dyn_ip
        fi

        if [ "${DYNIP}" != "$CURRENTIP" ]; then
                echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind ungleich"
                /var/emu/script/DDNSupdater2.sh now
                sleep 20
                dyn_ip
        else
                echo "Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" (DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
        fi
        counter=`expr $counter + 1`
done
Hier einfach die Dyn-Adressen bei DDNSHOST["X"] in die Eigenen ändern.
Überzählige ggf. entfernen
 
Zuletzt bearbeitet:
AW: Script zur Prüfung ob die DynDNS aktuell ist

Moin al-x83,
ist es viel Arbeit wenn du mir kurz den Ansatz zeigst wie das Script mehrere Dyn's "checkt"?
So nach dem Motto:
DDNSHOST01="mydomain.de"
DDNSHOST02="mycar.de"
DDNSHOST03="myhome.de"
... usw
CurrentIP bleibt ja bei einmal abfragen. Kann ruhig jede .dynip nacheinander eintragen oder für jede IP ne eigene Datei (.dyn02,dyn03,...), das wäre egal.

Ist das machbar ohne sich großartig am heiligen Sonntag zu bewegen um dem Centaury ne Freude zu machen?


Gesendet von iPhone mit Tapatalk
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

Grüß dich Grillmaster!

Ich werde heute nicht dazu kommen, werd mir das Ganze morgen aber mal anschauen. Denke mal, wenn man das in eine Schleife packt oder so, sollte das klappen
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

Ich wusste das du mich nicht hängen lässt.
Das mit Schleife und tricksen und fuschen teste ich schon seitdem Formel 1 läuft, aber so richtig sauber/vernünftig will es nicht. Bin da einfach zu blöd für.

Lass dir ruhig Zeit, ist überhaupt nichts was eilt. Ich teste parallel mal weiter, denke aber das du sogar in 2 Wochen schneller bist als ich.


Gesendet von iPhone mit Tapatalk
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

Ja klar das ist kein Thema, das zu machen! Hab bisher einfach zwei skripte parallel am laufen. Also zwei mal das selbe mit unterschiedlichen dyndns. Aber eleganter ist das natürlich in einem. Und dann gleich noch ne sendEmail Zeile dazu... Ich schaus mir die Tage auch mal an :-)
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

So ähnlich meinte ich meine Version mit fuschen.
Aber bisschen eleganter sollte im Jahr 2015 doch wohl drinsitzen.


Gesendet von iPhone mit Tapatalk
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

Das DDDNsupdater2.sh überprüft doch die öffentliche IP des Servers und wenn die sich geändert hat. Wird die dyndnsip geändert.(Zwangstrennung usw)

Wenn man das DDDNsupdater2.sh das angibt
Code:
EVERY="60"        # Zeit in Sekunden zwischen den Abfragen
sollte das doch auch reichen
 
Zuletzt bearbeitet:
AW: Script zur Prüfung ob die DynDNS aktuell ist

Danke nochmals für das Skript!

Ich hab für mich mal noch ein sendEmail dazugehängt damit ich im Fehlerfall ne Mail bekomme. Kann man aber an und abschalten. Wenn man möchte auch ne Mail wenn alles IO ist.

Code:
#!/bin/bash
#Script zur Prüfung der Aktualität der DynDNS by al-x83 V 2.00
#Jetzt mit mehreren DynDNS
DDNSHOST["1"]="my.dyndns1.com"
DDNSHOST["2"]="my.dyndns2.com"
DDNSHOST["3"]="my.dyndns3.com"
DDNSHOST["4"]="my.dyndns4.com"
DDNSHOST["5"]="my.dyndns5.com"
counter=1


#eMail Benachrichtigung
ABSENDER="absender@provider.de"
EMPFAENGER="empfaenger@provider.de"
SMTPSERVER="smtp.provider.de"
SMTPUSER="smtpuser@provider.de"
SMTPPASSWORD="smtppassword"
TLS="no" #yes no auto
GOODMAIL=false #Mail versenden wenn DYNDNS in Ordnung
BADMAIL=true #Mail versenden wenn DYNDNS Fehler


#Aktuelle IP ermitteln:
CURRENTIP=$(wget http://www.wieistmeineip.de -U "" -qO - | egrep -o   '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'   | uniq)


function dyn_ip () {
    DYNIP=$(ping -c1 "${DDNSHOST[$counter]}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
    if [ -f "/tmp/.dynip" ]; then
        rm /tmp/.dynip
    fi
    echo $DYNIP >> /tmp/.dynip
}


for index in ${!DDNSHOST
[*]}; do


        if [ -f "/tmp/.dynip" ]; then
                DYNIP=$(cat /tmp/.dynip)
        else
                dyn_ip
        fi


        if [ "${DYNIP}" != "$CURRENTIP" ]; then
                if [ "$BADMAIL" = true ] ; then
                        sendemail -f "$ABSENDER" -t "$EMPFAENGER" -u OSCam-Server DynDNS Fehler -m Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" und die aktuelle Internet IP "$CURRENTIP" sind ungleich -s "$SMTPSERVER" -xu "$SMTPUSER" -xp "$SMTPPASSWORD" -vv -o tls="$TLS"
                fi
                #/var/emu/script/DDNSupdater2.sh now
                sleep 20
                dyn_ip
        else
                if [ "$GOODMAIL" == true ] ; then
                        sendemail -f "$ABSENDER" -t "$EMPFAENGER" -u OSCam Server DynDNS IO -m Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" und die aktuelle Internet IP "$CURRENTIP" sind identisch -s "$SMTPSERVER" -xu "$SMTPUSER" -xp "$SMTPPASSWORD" -vv -o tls="$TLS"
                fi
                echo "Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" (DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
        fi
        counter=`expr $counter + 1`
done

Bin für Anregungen und weitere Änderungen gerne offen!

Habs bei mir getestet und es klappt :-)
 
AW: Script zur Prüfung ob die DynDNS aktuell ist

so wie es ausschaut, antwortet wieistmeineip.de seit letzter Woche nicht mehr auf die bash Anfrage. Deshalb habe ich bei mir die Anfrage für CURRENTIP so abgeändert:
Code:
CURRENTIP=$(w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }')

Dazu muss allerdings das Paket w3m installiert sein
 
Zurück
Oben