Seit langem ist ja bekannt, dass Dyndns Accounts ablaufen wenn man sich nicht
mit einem Dyndns Client regelmäßig anmeldet.
Vor nicht allzu-langer Zeit kam eine Mail von DynDns, dass dies nicht mehr ausreicht!
Man muss sich nun monatlich über die Weboberfläche anmelden!
Ich bin ein vergesslicher Mensch und habe nach einer Automatisierung gesucht.
Habe folgendes Skript gefunden und angepasst http://blog.stuart.shelton.me/archives/1024.
Voraussetzung:
-Freetz mit Curl.
-Gültige Email Daten im Push Service (Zu finden unter der AVM Oberfläche unter System).
Hinweise zur Nutzung:
1. Das Skript mit Login, Password und einer Empfänger-Emailadresse speichern.
2. Die angepasste Datei (bsp. dyndns.sh) hochladen nach /tmp/flash/dyndns.sh (geht mit Rudi-Shell).
3. Folgender Befehl setzt Ausführungsrechte chmod +x /tmp/flash/dyndns.sh (geht auch mit Rudi-Shell).
4. Persistieren im Flash: modsave flash (geht auch mit Rudi-Shell).
5. In Freetz unter System crontab ähnliches eintragen Minute Stunde Tag,Tag * * /tmp/flash/dyndns.sh
(Minute ersetzen mit einer Zahl zwischen 0 und 59)
(Stunde ersetzen mit einer Zahl zwischen 0 und 23)
(Tag,Tag am besten etwas variieren zb: jeden 5. und 17. des Monats = 7,15)
DynDns soll ja nicht merken, dass mehrere Leute ein und das selbe Skript nutzen
Man sollte das Skript über die Konsole mal getestet haben !
1. Wenn man die Raute vor "DEBUG=1" entfernt, bekommt Ihr beim Testen etwas mehr Informationen in der Konsole angezeigt.
2. Zum Testen am Besten auch die Zeile "sleep $DELAY" mit einer Raute auskommentieren.
Viel Spaß damit:
Änderungen am Code 23.06.2013:
Weil bei hexdump aus unerklärlichen Gründen, bei einigen Boxen
negative Zahlen rauskommen, hab ich tr -d '-' ergänzt.
DELAY=$(($(hexdump -n 2 -e '"%u"' /dev/urandom | tr -d '-') % 3000 + 1))
Alternativ funktioniert auch die Methode mit awk.
DELAY=$(awk 'BEGIN {srand(); print int (rand() * 3000) }')
@MaxMuster: Gute Alternative. THX.
Infos zu hexdump und Modulo '%'
hexdump sollte bei -n2 eine Zahl zwischen 0 und 65535 liefern.
Dafür ist das -n2 = 2Byte; 1Byte = 256-1 folglich sind 2 Byte = (256*256)-1 = 65535.
Durch das Modulo '%' ist eine Zahl die größer als 3000 ist, mathematisch nicht möglich.
Das trotz der Formatierung '%u' (unsigned int) negative Zahlen auftreten ist komisch.
Wenn hexdump, aus mir unerklärlichen Gründen, Zahlen liefert die größer 65535 sind,
ist das egal, weil % folgt.
Ich danke allen fürs Feedback, da das Skript so auch getestet wurde und der Minus Fehler entlarvt wurde,
der bei manchen Boxen scheinbar auftritt.
@SaschaBr
Und natürlich könnt Ihr das Skript in anderen Foren posten, nett wäre ein Link hierher.
Have Fun !
mit einem Dyndns Client regelmäßig anmeldet.
Vor nicht allzu-langer Zeit kam eine Mail von DynDns, dass dies nicht mehr ausreicht!
Man muss sich nun monatlich über die Weboberfläche anmelden!
Ich bin ein vergesslicher Mensch und habe nach einer Automatisierung gesucht.
Habe folgendes Skript gefunden und angepasst http://blog.stuart.shelton.me/archives/1024.
Voraussetzung:
-Freetz mit Curl.
-Gültige Email Daten im Push Service (Zu finden unter der AVM Oberfläche unter System).
Hinweise zur Nutzung:
1. Das Skript mit Login, Password und einer Empfänger-Emailadresse speichern.
2. Die angepasste Datei (bsp. dyndns.sh) hochladen nach /tmp/flash/dyndns.sh (geht mit Rudi-Shell).
3. Folgender Befehl setzt Ausführungsrechte chmod +x /tmp/flash/dyndns.sh (geht auch mit Rudi-Shell).
4. Persistieren im Flash: modsave flash (geht auch mit Rudi-Shell).
5. In Freetz unter System crontab ähnliches eintragen Minute Stunde Tag,Tag * * /tmp/flash/dyndns.sh
(Minute ersetzen mit einer Zahl zwischen 0 und 59)
(Stunde ersetzen mit einer Zahl zwischen 0 und 23)
(Tag,Tag am besten etwas variieren zb: jeden 5. und 17. des Monats = 7,15)
DynDns soll ja nicht merken, dass mehrere Leute ein und das selbe Skript nutzen
Man sollte das Skript über die Konsole mal getestet haben !
1. Wenn man die Raute vor "DEBUG=1" entfernt, bekommt Ihr beim Testen etwas mehr Informationen in der Konsole angezeigt.
2. Zum Testen am Besten auch die Zeile "sleep $DELAY" mit einer Raute auskommentieren.
Viel Spaß damit:
Code:
#!/bin/sh
#DEBUG=1
LOGIN="***"
PASSWORD="***"
EMAIL="***"
COOKIES="/tmp/.dynsdns.cookies.txt"
AL="en-gb"
UA="Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"
LOGINURL="https://account.dyn.com/entrance/"
POSTURL="$LOGINURL"
CHKURL="https://account.dyn.com/"
[[ $DEBUG ]] && DST="-" || DST="/dev/null"
# random sleep time 1-3000
DELAY=$(($(hexdump -n 2 -e '"%u"' /dev/urandom | tr -d '-' ) % 3000 + 1))
# If the method above didn't work, try the following method witk awk-srand.
# DELAY=$(awk 'BEGIN {srand(); print int (rand() * 3000) }')
echo >&2 "Wait '$DELAY' sec..."
sleep $DELAY
[[ -w "$( dirname "$COOKIES" )" ]] || { echo >&2 "FATAL: Cannot write to directory '$( dirname "$COOKIES" )'" ; exit 1; }
# Ensure no broken session caching...
if [[ -s "$COOKIES" ]]; then
[[ -w "$COOKIES" ]] || { echo >&2 "FATAL: Cannot write to file '$COOKIES'" ; exit 1 ; }
rm -f "$COOKIES" >/dev/null 2>&1
fi
[[ $DEBUG ]] && echo >&2 "DEBUG: Fetching initial headers to pre-load cookies..."
curl -b $COOKIES -c $COOKIES -Ikso "$DST" -A \"$UA\" --url "$LOGINURL"
[[ $DEBUG ]] && echo >&2 "DEBUG: Fetching UID..."
VALUE="$(
curl -b $COOKIES -c $COOKIES -kso - -A \"$UA\" --url "$LOGINURL" | \
grep -m 1 "multiform" | \
cut -d"'" -f 6
)"
[[ $DEBUG ]] && echo >&2 "DEBUG: Read UID as '$VALUE' - posting data..."
curl -b $COOKIES -c $COOKIES -d "username=$LOGIN" -d "password=$PASSWORD" -d "iov_id" -d "multiform=$VALUE" -e "$LOGINURL" -kso "$DST" -A \"$UA\" --url "$POSTURL"
[[ $DEBUG ]] && echo >&2 "DEBUG: Response received - verifying result..."
curl -b $COOKIES -c $COOKIES -e "$POSTURL" -kso - -A \"$UA\" -H "Accept-Language: $AL" --url "$CHKURL" | \
grep -qE "<span>(Welcome|Hi) <b>$LOGIN</b></span>" \
&& echo "Login successful" \
|| { echo >&2 "Login failed" ; mail send -s "Dyndns web login failed !" -f "[email protected]" -t "$EMAIL" ; exit 1 ; }
exit 0
Änderungen am Code 23.06.2013:
Weil bei hexdump aus unerklärlichen Gründen, bei einigen Boxen
negative Zahlen rauskommen, hab ich tr -d '-' ergänzt.
DELAY=$(($(hexdump -n 2 -e '"%u"' /dev/urandom | tr -d '-') % 3000 + 1))
Alternativ funktioniert auch die Methode mit awk.
DELAY=$(awk 'BEGIN {srand(); print int (rand() * 3000) }')
@MaxMuster: Gute Alternative. THX.
Infos zu hexdump und Modulo '%'
hexdump sollte bei -n2 eine Zahl zwischen 0 und 65535 liefern.
Dafür ist das -n2 = 2Byte; 1Byte = 256-1 folglich sind 2 Byte = (256*256)-1 = 65535.
Durch das Modulo '%' ist eine Zahl die größer als 3000 ist, mathematisch nicht möglich.
Das trotz der Formatierung '%u' (unsigned int) negative Zahlen auftreten ist komisch.
Wenn hexdump, aus mir unerklärlichen Gründen, Zahlen liefert die größer 65535 sind,
ist das egal, weil % folgt.
Ich danke allen fürs Feedback, da das Skript so auch getestet wurde und der Minus Fehler entlarvt wurde,
der bei manchen Boxen scheinbar auftritt.
@SaschaBr
Und natürlich könnt Ihr das Skript in anderen Foren posten, nett wäre ein Link hierher.
Have Fun !
Zuletzt bearbeitet: