AW: Monatliche DynDNS-Anmeldung per Script
Fehlt da nicht noch der Port?
genau genommen nein. der port kann bei SMTPSERVER eingetragen werden also zum beispiel SMTPSERVER='mail.gmx.net:25' aber 25 der standard port der auch verwendet wird wenn man ihn dort nicht angibt.. allerdings kommt es auf den jeweiligen anbieter an welcher port genutzt werden muss, das ist nämlich nicht immer der standard port
desweiteren ist (ohne unfreundlich wirken zu wollen) das etwas stümperhafte durch copy&past erstellte script von rooki_1 zudem auch etwas fehlerhaft, CRASHMAIL hat zum beispiel keinerlei funktion..
es kommt auch auf den jeweiligen email anbieter an ob sich über TLS verbunden werden muss, dafür gibt es in rooki_1's script aber auch keine option und last but not least ist die antwort von account.dyn.com nicht immer "Welcome" sondern manchmal auch "Hi"
hier mal eine angepasste version des scripts welches alles beachten sollte:
- funktioniert mit sowohl "Welcome" als auch "Hi"
- unterstützt sonderzeichen im USERNAME / PASSWORD
- benötigt keine zusätzlichen pakete (nutzt wget anstatt curl)
- das logfile kann auch abgeschaltet werden
- optional kann die maximale grösse des logfiles eingestellt werden (befehl "stat" erforderlich)
- wahlweise kann das logfile rotiert oder gelöscht werden
- optional nur bei fehlerhaftem login eine email verschicken..
Code:
#!/bin/bash
#
# dyndns web-login. version: 1.21
#
# credits: mxer (www.digital-eliteboard.com), jensebub (IPC.pebkac.at), feissmaik (IPC.pebkac.at)
#
# DynDNS Benutzername
USERNAME="login"
# DynDNS Passwort
PASSWORD="pass"
# Logfile. wenn nicht gewuenscht leer lassen ($0 bewirkt das der dateiname des scripts genutzt wird)
LOGFILE="/tmp/$(basename $0).log"
# Maximale Logfile Grösse in Bytes? (leer lassen falls unbegrenzt) (512000 bytes = 500 kilobytes = 0.48 megabytes)
MAXLOGSIZE="512000"
# falls MAXLOGSIZE genutzt wird: Logfile rotieren(1) oder löschen(0)?
LOGROTATE=0
# EMail verschicken? 0 = Nein, 1 = Ja (Vorraussetzung: apt-get install sendEmail)
SENDMAIL="1"
# EMail nur bei Problemen verschicken? 0 = Nein, 1 = Ja
BUGMAIL="0"
# EMail Absender
SMTPFROM="`hostname`@fqdn.net"
# EMail Empfänger
SMTPTO='an@e-mail.de'
# EMail Server Adresse (falls port vom std. 25 abweicht, inform von HOST:PORT angeben)
SMTPSERVER='mail.anbieter.de'
# EMail Benutzername
SMTPUSER='user'
# EMail Passwort
SMTPPASS='pass'
# TLS verwenden? 0 = Nein, 1 = Ja
SMTPTLS='0'
# CONFIG - END
#- variables
COOKIE=/tmp/ddnsweblogin_cookie
OUTPUT=/tmp/ddnsweblogin_output
MULTIFORM=/tmp/multiform
TIMESTAMP=$(date +"%d.%m.%Y %H:%M:%S")
UA='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6'
aDYN="https://account.dyn.com/"
SUBJECT1="Dyndns Login successful"
MESSAGE1="Dyndns Login wurde vom `hostname -f` erfolgreich durchgeführt!"
SUBJECT2="Dyndns Login failed"
MESSAGE2="ACHTUNG! Dyndns Login über `hostname -f` ist fehlgeschlagen!"
#- functions
# write and check log
_LOG() {
if [ -n "$LOGFILE" ]; then
#check size of logfile
if [ -n "$MAXLOGSIZE" ] && [ -f "$LOGFILE" ] && [ "$(stat --printf="%s" $LOGFILE)" -gt "$MAXLOGSIZE" ]; then
if [ "$LOGROTATE" = 1 ]; then
echo "rotating log $LOGFILE"
mv -f $LOGFILE ${LOGFILE}.1 >/dev/null 2>&1
else
echo "resetting log $LOGFILE"
rm -f $LOGFILE >/dev/null 2>&1
fi
touch $LOGFILE
fi
echo "[$TIMESTAMP] $1" >> $LOGFILE
fi
}
#E-Mail senden
mailsend() {
if [ -n "$SMTPTLS" ]; then
[ $SMTPTLS = 1 ] && OPT="-o tls=yes" || OPT="-o tls=no"
else
OPT=""
fi
echo "Sende E-Mail..."
sendEmail -f $SMTPFROM -t $SMTPTO -u $1 -m $2 $OPT -s $SMTPSERVER -xu $SMTPUSER -xp $SMTPPASS
}
# Simple URL encoding
proc_url_encode() {
out=${1//%/%25}; out=${out//\{/%7B}; out=${out//\}/%7D}; out=${out//|/%7C};
out=${out//\\/%5C}; out=${out//^/%5E}; out=${out//~/%7E}; out=${out//[/%5B};
out=${out//]/%5D}; out=${out//\`/%60}; out=${out//#/%23}; out=${out//>/%3E};
out=${out//\$/%24}; out=${out//&/%26}; out=${out//+/%2B}; out=${out//,/%2C};
out=${out//\//%2F}; out=${out//:/%3A}; out=${out//;/%3B}; out=${out//=/%3B};
out=${out//\?/%3F}; out=${out// /%20}; out=${out//</%3C};
out=${out//\!/%21}; out=${out//\"/%22}; out=${out//\@/%40}; out=${out//\'/%27};
out=${out//\(/%28}; out=${out//\)/%29}; out=${out//\*/%2A}; out=${out//\-/%2D};
out=${out//\_/%5F}; out=${out//\./%2E}; out=${out//\€/%80};
echo $out
}
#- main code
# encode username / password
USER=$(proc_url_encode "$USERNAME")
PASS=$(proc_url_encode "$PASSWORD")
if [ "$?" -gt 0 ]; then
USER=$USERNAME
PASS=$PASSWORD
fi
wget -q -O $MULTIFORM -U "$UA" --save-cookies $COOKIE $aDYN
MULTIFORMo=$(grep -m1 multiform $MULTIFORM | tr '=' '\n' | tail -1 | cut -d "'" -f 2)
wget -q -O $OUTPUT -U "$UA" --load-cookies $COOKIE --save-cookies $COOKIE --post-data "username=$USER&password=$PASS&iov_id&multiform=$MULTIFORMo" $aDYN
if grep -E "Welcome.*$USERNAME" $OUTPUT >/dev/null 2>&1 || "Hi.*$USERNAME" $OUTPUT >/dev/null 2>&1
then
echo "$SUBJECT1"
_LOG "$SUBJECT1"
[ $SENDMAIL = 1 ] && [ $BUGMAIL = 0 ] && mailsend "$SUBJECT1" "$MESSAGE1"
else
echo "$SUBJECT2"
_LOG "$SUBJECT2"
[ $SENDMAIL = 1 ] && mailsend "$SUBJECT2" "$MESSAGE2"
fi
rm -f $COOKIE $OUTPUT $MULTIFORM
exit 0
# EOF
bitte testen