#!/bin/sh
############################## config - Bereich ######################################################
### Usernamen, PW und Dyndns-Adresse eintragen ############
USERNAME="xx.yy%40zz.de"
PASSW="xxx"
DYNADDI="xxx.yyy.zzz"
LOGPFAD=/var/log/DynUpdateCheck.log # SpeicherOrt des LogFile
MAXLOGSIZE="100" # max Logfilegroesse in KB
WGET=wget1
FORCE_UPDATE="no"
SENDMAIL="/bin/bash /usr/local/etc/watchdog/sendmail.sh"
### Dyn-Dienst hier eintragen, 3 Moeglichkeiten - "dyndns" oder "no-ip" oder "dnsomatic" ############
DYNDIENST="no-ip"
############################### config Ende ###############################################################
#############################################################################################################
DATUM=`date +%Y-%m-%d\ %H:%M:%S`
#nslookup <dyn.dns.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" > /var/tmp/myip
### die folgende Zeile nur auf einer Fritzbox aktiviert lassen (auf einer Dream z.B. gibt es kein "get_ip")#
#HOSTIP=$(/usr/bin/get_ip -a)
[ -z $HOSTIP ] && HOSTIP=$($WGET -q -O -
Sie müssen registriert sein, um Links zu sehen.
)
###
[ -z $HOSTIP ] && HOSTIP=$($WGET -q -O -
Sie müssen registriert sein, um Links zu sehen.
| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>')
#[ -z $HOSTIP ] && HOSTIP=`$WGET -q -O -
Sie müssen registriert sein, um Links zu sehen.
| grep IP | expr \`awk '{print $6}'\` : '\([0-9.]*\)'`
#[ -z $HOSTIP ] && HOSTIP=$($WGET -q -O -
Sie müssen registriert sein, um Links zu sehen.
| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>')
#[ -z $HOSTIP ] && HOSTIP=$($WGET -q -O -
Sie müssen registriert sein, um Links zu sehen.
)
sleep 1
[ $DYNDIENST = "dyndns" ] && URL="http://$USERNAME:$PASSW@members.dyndns.org/nic/update?hostname=$DYNADDI&myip=$HOSTIP"
[ $DYNDIENST = "dnsomatic" ] && URL="http://$USERNAME:$PASSW@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=$HOSTIP"
[ $DYNDIENST = "no-ip" ] && URL="http://$USERNAME:$PASSW@dynupdate.no-ip.com/nic/update?hostname=$DYNADDI&myip=$HOSTIP"
if [ ! -z $HOSTIP ]; then
DYNIP=$(ping -c 1 "$DYNADDI" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d ' ' -f3 | cut -d ':' -f1)
if [ -z $DYNIP ]; then
echo "$DATUM - NoIp: Keine DYN-IP bekommen. Updatepruefung kann nicht ausgefuehrt werden. " >> $LOGPFAD
else
if [ $DYNIP = $HOSTIP ]; then
if [ -f $LOGPFAD ]; then
LOGGROESSE=$(du -k $LOGPFAD | cut -f 1 )
sleep 1
if [ $MAXLOGSIZE -le $LOGGROESSE ]; then
echo "$DATUM - NoIP:$DYNIP = HostIP:$HOSTIP => Log Full !!" >> $LOGPFAD
$SENDMAIL "NoIp DynUpdateCheck: Max Logfilegroesse erreicht. Logfile wird geloescht" "empty" "-a $LOGPFAD"
sleep 15
echo "$DATUM - NoIP:$DYNIP = HostIP:$HOSTIP => Neuer Log angelegt" > $LOGPFAD
fi
[ $MAXLOGSIZE -gt $LOGGROESSE ] && echo "$DATUM - NoIP:$DYNIP = HostIP:$HOSTIP => Alles OK!" >> $LOGPFAD
else
echo "DATUM - NoIP [-f] :NoIP:$DYNIP = HostIP:$HOSTIP => Alles OK!" >> $LOGPFAD
FORCE_UPDATE="yes"
fi
else
echo "$DATUM - NoIp:$DYNIP != HostIp:$HOSTIP => Update wird durchgefuehrt!" >> $LOGPFAD
UPDATE=$($WGET -q -O - "$URL")
echo "$UPDATE" > /tmp/DynTMP.log
sleep 2
MELDUNG=$(cut -d' ' -f 1 /tmp/DynTMP.log)
if [ $MELDUNG = "good" ]; then
echo "$DATUM NoIp - $UPDATE: Dyn-Update ist erfolgt" >> $LOGPFAD
$SENDMAIL "DynDNS Problem NoIp:$DYNIP, HostIp:$HOSTIP, DynUpdate ist erfolgt. Meldung: $UPDATE"
else
echo "$DATUM NoIp - $UPDATE: DynUpdate war nicht erfolgreich." >> $LOGPFAD
$SENDMAIL "DynDNS Problem NoIp:$DYNIP, HostIp:$HOSTIP, DynUpdate war nicht erfolgreich. Meldung: $UPDATE"
fi
fi
if [ $FORCE_UPDATE = "yes" ]; then
echo "$DATUM - NoIp:$DYNIP Refresh für NoIp-account => Update wird durchgefuehrt!" >> $LOGPFAD
FORCE_UPDATE = "no"
UPDATE=$($WGET -q -O - "$URL")
echo "$UPDATE" > /tmp/DynTMP.log
sleep 2
MELDUNG=$(cut -d' ' -f 1 /tmp/DynTMP.log)
if [ $MELDUNG = "nochg" ]; then
echo "$DATUM NoIp - $UPDATE: Dyn-Refresh ist erfolgt" >> $LOGPFAD
$SENDMAIL "DynDNS Problem NoIp:$DYNIP, HostIp:$HOSTIP, DynRefresh ist erfolgt. Meldung: $UPDATE"
else
echo "$DATUM NoIp - $UPDATE: DynRefresh war nicht erfolgreich." >> $LOGPFAD
$SENDMAIL "DynDNS Problem NoIp:$DYNIP, HostIp:$HOSTIP, DynRefresh war nicht erfolgreich. Meldung: $UPDATE"
fi
fi
fi
else
echo "$DATUM NoIp: Keine HostIP bekommen! Eventuell nicht online?" >> $LOGPFAD
fi