#!/bin/sh
#
# v0.3
#
# credits: Didge2002, SnowHead, meigrafd
#
USER="XXXX" # DynDNS Benutzername
PASS="XXXX" # DynDNS Passwort
HOST="XXXX.dyndns.XX" # 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="0" # Sind Wildcards enabled, können auch Adressen wie "bla.host.dyndns.org" angesprochen werden
###
#CHECKIPURL="http://www.myip.ch/"
CHECKIPURL="http://checkip.dyndns.org/"
URL="http://members.dyndns.org/nic/update?hostname=$HOST"
if [ "$WILDCARD" = "1" ]; then
URL="$URL&wildcard=ON"
fi
LOGFILE="/tmp/log_dyndns"
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 domain $HOST !" >> $LOGFILE
fi
echo "WARNING!! You abused the DynDNS update function! You must Unlock your domain $HOST !"
fi
}
get_IPs() {
HOSTIP=$(ping -c 1 "$HOST" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | awk '{ print $3 }')
wget -q -O /tmp/dyndns_current_ip $CHECKIPURL
CURRENTIP=$(cat /tmp/dyndns_current_ip | cut -d ' ' -f 6 | cut -d '<' -f 1)
}
do_update() {
wget -q -O /tmp/dyndns_answer --user="$USER" --password="$PASS" $URL
}
update_interval() {
while true
do
get_IPs
if [ "$HOSTIP" != "$CURRENTIP" ]; then
do_update
abuse_check
LOG_update
fi
sleep $EVERY
done
}
kill_script() {
PID=$(pidof $0)
if [ -z "$PID" ]; then
PID=$(cat /tmp/.dyndns.pid)
fi
if [ ! -z "$PID" ]; then
echo "PID: $PID"
kill -9 $PID >/dev/null 2>&1
killall -9 sleep >/dev/null 2>&1
echo "Should be killed..."
rm -f /tmp/.dyndns.pid
else
echo "Nothing to $1!"
fi
}
case "$1" in
""|auto)
echo ${$} >/tmp/.dyndns.pid
update_interval
;;
stop|kill)
kill_script $1
;;
help|hilfe|?)
echo "Usage: $0 [now|auto|kill|help]"
;;
*)
get_IPs
do_update
abuse_check
echo "HOST: $HOST - HOSTIP: $HOSTIP - CURRENTIP: $CURRENTIP"
echo "DynDNS answer: $dyndns_answer"
;;
esac
exit 0
# Es ist egal wo das script abgelegt wird, hauptsache nicht in /tmp weil dort ist nach einem Reboot nix mehr von vorher :D
# Also du kannst es zb in /bin legen oder auch in /var/bin ... das ist absolut egal
# Ausführbar machen, also mind chmod 700 setzen, und den Header vom Script natürlich noch anpassen und starten, das wars :thumbsu:
# Damit es auch beim Reboot gestartet wird kannst du es zb in /etc/rc.local vor dem exit 0 eintragen: /path/to/script.sh &