1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz etc)

Dieses Thema im Forum "Archiv" wurde erstellt von r00t, 28. August 2010.

  1. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    dynDNS update script (kompatible zu allen embedded linux's also receiver, fritz etc)

    Dieses Script pingt regelmässig die IP der DynDNS-host und vergleicht sie mit der aktuellen IP des Internetanschlusses und eine aktuallisierung (update) erfolgt nur wenn diese voneinander abweichen also unterschiedlich sind.
    Bei Bedarf kann von der Aktuallisierung auch ein Logfile in /tmp geschrieben werden.
    Für den IP Abgleich werden 2 verschiedene Adressen abgefragt; falls die Hauptadresse von DynDNS nicht zu erreichen ist, wird stattdessen myip.ch abgefragt.

    Es besteht somit nicht die Gefahr von DynDNS wegen Flood gesperrt zu werden wie es bei anderen Scripts/Plugins leider vorkommt


    Usage: dyndnsupdater.sh [now|auto|kill|help]


    Damit das Script funktioniert, muss man mit einem Linux fähigen Editor (zb Ultra Edit) den Header bearbeiten. Dort muss die dyndns Host, Username und Passwort eingetragen werden.

    Erstellt eine neue, ausführbare Datei mit folgendem Inhalt:
    (zum Beispiel /bin/dyndnsupdater.sh , wo das Script letzlich liegt ist egal)
    Code:
    #!/bin/sh
    #
    # v0.4
    #
    # credits: Didge2002, SnowHead, r00t
    #
    
    USER="benutzer"            # DynDNS Benutzername
    PASS="password"            # DynDNS Passwort
    HOST="host.ath.cx"         # DynDNS Hostname
    EVERY="300"                # Zeit in Sekunden zwischen den Abfragen
    LOG="1"                    # Erstelle Logfile /tmp/log.dyndns? (wenn möglich aus lassen) [0=nein; 1=ja]
    WILDCARD="1"               # Sind Wildcards enabled, können auch Adressen wie "bla.host.ath.cx" angesprochen werden
    
    ###
    
    # required system binary's:
    # awk cat cut date echo expr killall pidof ping rm sed sleep wget  
    
    CHECKIPURL="http://checkip.dyndns.org/"
    CHECKIPURL2="http://www.myip.ch/"
    URL="http://members.dyndns.org/nic/update?hostname=$HOST"
    LOGFILE="/tmp/log.dyndns"
    
    if [ "$WILDCARD" = "1" ]; then
        URL="$URL&wildcard=ON"
    fi
    
    do_update() {
        wget -q -O /tmp/dyndns_answer --user="$USER" --password="$PASS" $URL
    }
    
    LOG_update() {
        if [ $LOG = "1" ]; then
            _DT=$(date +"%d.%m.%Y %H:%M:%S")
            dyndns_answer=$(cat /tmp/dyndns_answer)
            echo "$_DT: HOSTIP: $HOSTIP - CURRENTIP: $CURRENTIP - DynDNS answer: $dyndns_answer" >>$LOGFILE
        fi
    }
    
    abuse_check() {
        dyndns_answer=$(cat /tmp/dyndns_answer)
        if [ "$dyndns_answer" = "abuse" ]; then
            if [ -z "$1" -a $LOG = "1" ]; then
                echo "WARNING!! You abused the DynDNS update function! You must Unlock your hostname: $HOST !" >>$LOGFILE
            fi
            echo "WARNING!! You abused the DynDNS update function! You must Unlock your hostname: $HOST !"
        fi
    }
    
    get_IPs() {
        HOSTIP=$(ping -c 1 "$HOST" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | awk '{ print $3 }')
        wget -q --timeout=10 -O /tmp/dyndns_current_ip $CHECKIPURL
        CURRENTIP=$(cat /tmp/dyndns_current_ip | cut -d ' ' -f 6 | cut -d '<' -f 1)
        if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
            if [ ! -z "$1" ]; then
                echo "Hmm... $CHECKIPURL seems to be down?! Using: $CHECKIPURL2 insteed"
            fi
            if [ -z "$1" -a $LOG = "1" ]; then
                echo "Hmm... $CHECKIPURL seems to be down?! Using: $CHECKIPURL2 insteed" >>$LOGFILE
            fi
            wget -q -O /tmp/dyndns_current_ip $CHECKIPURL2
            CURRENTIP=$(cat /tmp/dyndns_current_ip | cut -d ' ' -f 6 | cut -d '<' -f 1)
        fi
    }
    
    update_interval() {
        echo $(pidof -x $0) >/tmp/.dyndns.pid
        while true; do
            get_IPs
            if [ "$HOSTIP" != "$CURRENTIP" ]; then
                do_update
                abuse_check
                LOG_update
            fi
            sleep $EVERY
        done
    }
    
    kill_script() {
        counter="5"
        PID=$(cat /tmp/.dyndns.pid)
        if [ -z "$PID" ]; then
            PID=$(pidof -x $0)
        fi
        if [ ! -z "$PID" ]; then
            PID="$PID `pidof -x sleep`"
            echo "PID: $PID"
            kill -9 $PID >/dev/null 2>&1
            echo "Killed $PID"
        else
            echo "Nothing to $1!"
        fi
        sleep 5
        if [ ! -z `pidof -x sleep` ]; then
            while [ $counter -gt 0 ]; do
                echo "...Retrying to kill script! (retrys: $counter , PID: $PID)"
                kill -9 $PID >/dev/null 2>&1
                PID=$(pidof -x $0)
                PID="$PID `pidof -x sleep`"
                counter=`expr $counter - 1`
            done
        fi
        echo "Should be killed..."
        rm -f /tmp/.dyndns.pid
    }
    
    echo_PIDs() {
        PID=$(cat /tmp/.dyndns.pid)
        if [ -z "$PID" ]; then
            PID=$(pidof -x $0)
        fi
        if [ -z "$PID" ]; then
            echo "Seems script isnt running in background"
        else
            PID="$PID `pidof -x sleep`"
            echo "Scripts currently ProcessIDs: $PID"
        fi
    }
    
    show_status() {
        get_IPs
        if [ "$HOSTIP" != "$CURRENTIP" ]; then
            echo "The IP of $HOST ($HOSTIP) does NOT match your current Internet-IP: $CURRENTIP"
            echo "Your should update immediately! (with: $0 now)"
        else
            dyndns_answer=$(cat /tmp/dyndns_answer)
            echo "DynDNS answer: $dyndns_answer"
            echo_PIDs
    
        fi
    }
    
    case "$1" in
        "")
            update_interval
        ;;
        auto)
            $0 &
        ;;
        stop|kill)
            kill_script $1
        ;;
        now)
            get_IPs
            do_update
            abuse_check
            echo "HOST: $HOST - HOSTIP: $HOSTIP - CURRENTIP: $CURRENTIP"
            echo "DynDNS answer: $dyndns_answer"
        ;;
        pid*)
            echo_PIDs
        ;;
        status)
            show_status
        ;;
        help|hilfe|?)
            echo "Usage: $0 [now|auto|kill|help]"
            echo "$0 now -> Force to update $HOST immediately (Sofortiges updaten von $HOST)"
            echo "$0 auto -> Checks/updates $HOST every $EVERY seconds (Überprüft/updated $HOST alle $EVERY Sekunden)"
            echo "$0 kill -> Kills running script (Script wird beendet)"
            echo "$0 help -> This help... (Zeigt diese Hilfe an...)"
        ;;
        *)
            echo "Usage: $0 [now|auto|kill|help]"
        ;;
    esac
    
    exit 0
    
    ACHTUNG: $EVERY sollte man auf keinen fall unter 2min (120sec) stellen, ansonsten wird die Host evtl. von DynDNS gesperrt wegen abuse (Missbrauch)!

    Damit das Script automatisch beim Hochfahren der Box auch gestartet wird, muss noch der Eintrag:
    /bin/dyndnsupdater.sh &
    in euer Startscript wie zb:
    /var/etc/init.d/start_neutrino
    oder /etc/rc.local
    oder bei der Dreambox in /etc/init.d/bootup
    eingetragen werden, aber auf jednfall vor dem exit 0
    (Danke incognito23 für den Dreambox-Hinweis)

    Bei dem start_neutrino File am besten hinter den Aufruf von "timerd" und vor "neutrino" eintragen und das "&" ist Wichtig und darf nicht weggelassen werden, sonst bootet die Box nicht weiter! (oder seit v0.4 gegen ein "auto" austauschen)

    Das Ende des Startup-Scripts sollte dann ungefähr so aussehen:
    Code:
    
    
    /bin/dyndnsupdater.sh &
    
    
    [I]exit 0[/I]
    
    Um es auszuprobieren oder manuell updaten zu lassen könnt ihr das Script so aufrufen: dyndnsupdater.sh now

    Wenn ihr das LOG an habt, sähe das Ergebnis ungefähr so aus:

    30.08.2010 21:09:24: HOSTIP: 84.xxx.xxx.42 - CURRENTIP: 84.xxx.xxx.79 - DynDNS answer: good 84.xxx.xxx.79
    31.08.2010 21:10:22: HOSTIP: 84.xxx.xxx.79 - CURRENTIP: 84.xxx.xxx.43 - DynDNS answer: good 84.xxx.xxx.43
    01.09.2010 21:09:24: HOSTIP: 84.xxx.xxx.43 - CURRENTIP: 84.xxx.xxx.110 - DynDNS answer: good 84.xxx.xxx.110
    02.09.2010 21:09:13: HOSTIP: 84.xxx.xxx.110 - CURRENTIP: 84.xxx.xxx.113 - DynDNS answer: good 84.xxx.xxx.113


    Das Script müsste eigentlich auf allen receivern mit embedded linux (linux allg.) etc funktionieren.
    Falls dennoch Probleme auftauchen bitte kurz bescheid geben!
    Danke :)



    Letztes Script-Update: 31.08.2010 (~12:30)
     
    Zuletzt bearbeitet: 11. September 2010
    #1
    61Trabz, reihu, Zorg und 11 anderen gefällt das.
  2. phantom

    Nervigen User Advertisement

  3. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Die aktuelle Scriptversion pingt den DynDNS Host an und vergleicht diese IP mit der IP die von

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?

    zurück gegeben wird und bei Abweichung wird der DynDNS Host aktuallisiert
     
    #2
    Pilot und szonic gefällt das.
  4. onder
    Offline

    onder Spezialist

    Registriert:
    29. Oktober 2009
    Beiträge:
    564
    Zustimmungen:
    23
    Punkte für Erfolge:
    18
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    bei linux reciver haste den ort angegeben wo kommt sie bei fritz hin
     
    #3
  5. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    das kannst du dir aussuchen :)
     
    #4
  6. Geistlicher
    Offline

    Geistlicher Spezialist

    Registriert:
    8. Oktober 2009
    Beiträge:
    662
    Zustimmungen:
    475
    Punkte für Erfolge:
    63
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    ist das egal, wo man das Script hinkopiert in der Fritz?
     
    #5
  7. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    ja, eigentlich ist es generell egal.
    es sollte nur nicht in /tmp gelegt werden aber ansonsten kann man es sich aussuchen, ob /bin oder /var/bin oder /home/bla ... :)

    nachher (1-2h) kommt aber noch ne neue version von dem script - hab noch ein paar bugs gefunden bzw behoben
     
    #6
  8. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Es wird leider schon etwas grösser das Script, ursprünglich 970Byte, mittlerweile 4,1kB :)

    An der Version 0.4 habe ich das beenden vom Script im Hintergerund verbessert - jetzt versucht er mind. 5x das Script zu beenden (es klappt leider nicht immer beim ersten mal)
    Und was mir auch noch sehr wichtig war, ist eine alternative URL um die aktuelle IP herraus zu finden.
    Falls http://checkip.dyndns.org/ jetzt mal nicht reagiert wird stattdessen http://www.myip.ch/ abgefragt

    Ausserdem wird mit './dyndnsupdater.sh help' eine kleine Kommando-Hilfe angezeigt und mit './dyndnsupdater.sh auto' lässt sich das script in den Hintergrund parken (quasi identisch zu './dyndnsupdater.sh &')
     
    #7
  9. onder
    Offline

    onder Spezialist

    Registriert:
    29. Oktober 2009
    Beiträge:
    564
    Zustimmungen:
    23
    Punkte für Erfolge:
    18
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    dieser script soll doch bestimmt auf den usb stick und wohin ?
    auf die fritz kann sie wohl nicht kopiert werden?
    kann mann als editor auch crimson nehmen?
     
    #8
  10. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Probier es doch einfach mal aus?

    Wie ich bereits sagte ist der Ort wo das Script letzlich abgelegt wird, völlig wumpe - hauptsache es ist ausführbar und auch richtig ins Startupscript eingebunden


    Meiner Meinung nach trifft das für alle Scripts zu, die nicht in irgendeiner Form auf einem receiver übers Fernbedienungsmenue oder ähnlich angesprochen werden müssen


    Wenn du nicht weisst ob dein Editor "crimson" Linux kompatible ist, benutz lieber nano oder vi (vim) auf deiner Box oder besorg dir UltraEdit oder Proton
    (ich kenne nicht jeden editor)
     
    #9
    onder gefällt das.
  11. incognito23
    Offline

    incognito23 Ist gelegentlich hier

    Registriert:
    30. März 2009
    Beiträge:
    65
    Zustimmungen:
    2
    Punkte für Erfolge:
    8
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Hi, ich möchte auch gerne das Script nutzen. Kann mir jemand sagen, wo ich den Eintrag: /bin/dyndnsupdater.sh & einfügen muss?
    Ich hab einen DM 800 mit Gemini 5.1 drauf. In welches Startscript kann man ihn integrieren? :emoticon-0122-itwas

    Vielen Dank.
     
    #10
  12. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Sicher das du keine /etc/rc.local wie ich es oben erwähnt habe, hast ?

     
    #11
  13. incognito23
    Offline

    incognito23 Ist gelegentlich hier

    Registriert:
    30. März 2009
    Beiträge:
    65
    Zustimmungen:
    2
    Punkte für Erfolge:
    8
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Hi, nein, habe ich nicht. Es gibt verschiede Ordner: rc0, rc1, rc 2 usw. aber eine Datei rc-lokal finde ich niergendwo.
     
    #12
  14. r00t
    Offline

    r00t Hacker

    Registriert:
    17. August 2010
    Beiträge:
    398
    Zustimmungen:
    75
    Punkte für Erfolge:
    0
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Wedernoch ? Das kann eigentlich nicht sein :)
    (rc.local nicht rc-lokal)

    Und sonst erstell sie neu: vi /etc/rc.local

    /var/etc/init.d/start_neutrino gäbe aber wie gesagt auch noch ;)
     
    #13
  15. incognito23
    Offline

    incognito23 Ist gelegentlich hier

    Registriert:
    30. März 2009
    Beiträge:
    65
    Zustimmungen:
    2
    Punkte für Erfolge:
    8
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Im init.d gibt es keine Datei die mit Start anfängt. Neutrino wohl gar nicht, weil es Enigma ist.
    Kann ich die rc.local nur mit dem Start-Befehl anlegen oder muss da noch was rein?

    Danke!

    Edit:
    Ich hab gerade in anderem Forum erfahren, dass die Datei es nicht auf der Dreambox gibt. Man muss den Startbefehl ans
    Ende der /etc/init.d/bootup, anhängen!
     
    Zuletzt bearbeitet: 10. September 2010
    #14
  16. incognito23
    Offline

    incognito23 Ist gelegentlich hier

    Registriert:
    30. März 2009
    Beiträge:
    65
    Zustimmungen:
    2
    Punkte für Erfolge:
    8
    AW: dynDNS update script (kompatible zu allen embedded linux's also receiver, fitz et

    Hi, ich nochmal.

    Ich hätte eine Frage, was bedeutet dieser Satz (rot eingezeichnet):

    "Bei dem start_neutrino File am besten hinter den Aufruf von "timerd" und vor "neutrino" eintragen und das "&" ist Wichtig und darf nicht weggelassen werden, sonst bootet die Box nicht weiter! (oder seit v0.4 gegen ein "auto" austauschen)".

    Soll man das "auto" irgendwo einfügen?

    Vielen Dank.
     
    #15

Diese Seite empfehlen