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)
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:
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)
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
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: