Aktuelle IP per Mail bei IP-Wechsel

Nein, da der zweitee Wert anscheinend irgendein Timestamp ist, solltest du das eben nicht so verwenden, sondern tatsächlich nur den einen Wert vergleichen.

Ruf das Script von mir mal bitte mit "sh -x scriptname" auf, und poste das Ergebnis. Und am besten auch gleich deines.
 
Mein Script:
/var/media/ftp/uStor01 # sh -x domaincheck.sh
+ cat /tmp/ddnsstat.txt
+ VAR1=5 54 Domainname
+ VAR2=5 54 Domainname
+ [ 5 54 Domainname = 5 54 Domainname ]
+ echo 5, also gesynct
5, also gesynct
/var/media/ftp/uStor01 #

Dein Script:
/var/media/ftp/uStor01 # sh -x domaincheck.sh
+ cat /tmp/ddnsstat.txt
+ sed s/\ .*//
+ VAR1=5
+ [ 5 == 5 ]
+ echo 5, also gesynct
5, also gesynct
/var/media/ftp/uStor01 #

Dein Script geht doch, nur du vergleichst VAR1 mit dem Wert 5
Ich hab hab aber auch schon den Wert 3 in der ddnsstat.txt gehabt.

Deswegen bekam ich also
echo "noe, was anderes. son mist aber auch"
obwohl die DNS Auflösung OK war.

Ist das eigentlich nicht egal, Ich möchte ja ne Mail
haben wenn die DNS Auflösung nicht erfolgreich war.

Und da hatte ich in der ddnsstat.txt bisher immer
stehen.
Also den Vergleichswert 5 einfach in 0 ändern.

Oder übersehe ich da was.
 
Man kann auch mehrere Werte vergleichen, bzw. eine "ODER"-Verknüpfung darin unterbringen.
Code:
[ "$VAR1" == 5 -o "$VAR1" == 3 ] ginge somit auch. 

Der kram in dem "echo"-Sachen ist frei wählbarere Text. Für mehr Einzelheiten lies bitte ein wenig ein Shell-Howto, das kann dir da wirklich helfen, und du lernst auch noch, was tu da tust.
 
DynDNS definiert da einige Werte, die sie zurücksenden. AVM-Client wandelt sie dann anscheinend in 0...5 um. 3 könnte z.B. heißen, dass deine IP so geblieben ist, wie sie war. Könntest du es bitte checken? Ich hatte letztens bei meinem 1und1-DSL öfters festgestellt, dass ich trotz reconnect die gleiche IP bekomme. Für DynDNS wird natürlich sowas fast wie ein Verbrechen bewertet.
0 wird da in diese Textdatei dann geschrieben, wenn dyndns gar nicht erreicht werden kann. So würde ich es verstehen.
Ansonsten schön, dass du diese Tests hier durchziehst. Ein bisschen Basics in der shell-Programmierung solltest du dir eineignen, aber du hast auf jeden Fall Potential. Weiter so!

MfG
 
Hab mir schon ein paar Seiten ergoogelt in denen es um Shell Progammierung geht,
bin aber leider noch nicht dazu gekommen sie mir ausführlich durchzulesen.

Werde dies am WE mal nachholen.

Aufgefallen ist mir eben das auf der FritzBox Übersichtsseite nach
der Zwangstrennung heute nacht bei DynamicDNS folgendes Stand
aktiviert, Domainname, Status: erfolgreich angemeldet
hier meldet ddnsstat.txt
5 22868 Domainname

gestern Stand da nur

aktiviert, Domainname, Status: angemeldet
und da meldete ddnsstat.txt
Werde das mal weiter beobachten.

Und erstmal ein fettes Danke an euch.
Bin durch eure Hilfe ja schon ein ganzes Stück weitergekommen.
 
Gut, dass du es auch so siehst, dass du da Bedarf zu Nachholen brauchst. Im Netz gibt es tatsächlich vieles zur Shell-Programmierung. Neben dem eigenlichen Shell wäre es auch nicht schlecht ein bisschen vom sed und grep zu lernen. In deinem Fall ist es erforderlich.

Zum Beobachten. Genau das ist das einzig Richtige, was man mit diesem closed-source-Ding von AVM machen kann.
Versuch mal bitte da einzelne Zustände zu provozieren. Z.B. Trennung auf eigene Faust, normale Trennung (Zwangstrennung), Reboot usw. Mich stört da etwas der zweite Parameter und dass AVM unterschiedliche Meldungen ausgibt, obwohl Status in beiden Fällen 5 ist.
Übrigens, nach den Textmeldungen kannst du in den AVM-html/cgi-Sourcen nachschauen. Vielleicht wirst du dadurch schlau. Irgendwie müssen sie es ja auch auswerten, und ich bezweifle stark, dass die Textmeldungen in den Binaries stecken. Vermutlich findest du dadurch die Stelle, wo AVM es auswertet, lernst was dazu und machst uns auch schlauer.

MfG
 
Ich hatte bei nem Kurztest auch "97" als Ergebnis. Das war der status "temprör disabled". Dabei hatte ich die Domäne falsch gesetzt, somit wohl unbekannter dyndns-host.
"3" hatte ich nach der Korrektur der Domäne, aber mit falscher Emailadresse.

Edit: Ein kurzer Blick in den HTML-Quelltext zeigt folgendes:
Code:
function DynDnsDisplay(){
url="<? query ddns:settings/account0/domain ?>";
if(url=="" || url=="" || url=="er")
url="{?de.home.home.js:860?}";
state="<? query ddns:settings/account0/state ?>";
nState=parseInt(state,10);
switch (nState){
case 0: state="{?de.home.home.js:865?}";break;
case 3: state="{?de.home.home.js:870?}";break;
case 5: state="{?de.home.home.js:875?}";break;
case 97: state="{?de.home.home.js:880?}";break;
case 98: state="{?de.home.home.js:885?}";break;
case 99: state="{?de.home.home.js:890?}";break;
default:state="{?de.home.home.js:895?}";break;
}
return jslPrintf("{?de.home.home.js:900?}",url,state);

Dann müsste man nur noch AVMs Textdatenbank dazu auseinandernehmen, um die entsprechenden Meldungen rauszubekommen. Aber zumindest wissen wir so, welche abgefragt werden.
 
Zuletzt bearbeitet:
Neben dem eigenlichen Shell wäre es auch nicht schlecht ein bisschen vom sed und grep zu lernen. In deinem Fall ist es erforderlich.

Kenntnisse von sed und grep sind immer wieder nützlich. In diesem Fall kommt man aber auch mit normaler Shell weiter, und spart sich nebenbei die Ausführung von externen Programmen.
Code:
read a b c < /tmp/ddnsstat.txt
if "$a" = 5; then
 ...
fi
 
Statt die "/tmp/ddnsstat.txt" auszuwerten, kann man die Box nach der Zwangstrennung bzw. nach dem Neustart, auch ein Ping auf die dyndns-Adresse machen lassen. Diesen Ping dann auswerten und mit dem entsprechenden Inhalt der "/sbin/showdsldstat" vergleichen und das Ergebnis mit mailer, per email versenden (-i /var/tmp/myip.txt). Wenn die IP-Adresse in () identisch mit der IP-Adresse nicht in (), dann ist Alles ok. Das Ganze in einem Script untergebracht und mit onlinechangend-cgi (... evtl. etwas verzögert) ausgeführt:
# ping -c 1 -4 -q -W 1 <dyn.dns.org> | sed -e "/PING <dyn.dns.org> /!d" | sed -e "s/PING <dyn.dns.org> \([0-9.()]*\).*/\1/" | sed -e "\$!d" > /var/tmp/myip.txt && get_ip -d >> /var/tmp/myip.txt

# cat /var/tmp/myip.txt
(###.###.101.134)
###.###.101.134

# rm -f /var/tmp/myip.txt
 
Ja, ping macht hier nur die DNS-Auflösung. Ja, nslookup kann man genau so gut verwenden. Es bleibt dem experimentierfreudigen User überlassen, was er nimmt.;)

EDIT:
OK, wer nslookup für die DNS-Auflösung verwenden will, der kann es so machen:
# nslookup <dyn.dns.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" > /var/tmp/myip.txt && get_ip -d >> /var/tmp/myip.txt

EDIT 2:
Das habe ich in "onlinechanged-cgi" eingetragen:
case "$1" in
start)
# Kommandos beim Start des Routers
# ggf. sollten hier die Enträge von online) stehen
noip2;
sleep 15;
pidnoip="$(pidof noip2)";
noip2 -K $pidnoip;
nslookup <yyy.dysdns.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" > /var/tmp/myip.txt;
nslookup <xxx.noip.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" >> /var/tmp/myip.txt;
get_ip -d >> /var/tmp/myip.txt;
uptime >> /var/tmp/myip.txt;
mailer -s "myFritz!Box IP-Status from: `/bin/date`" -f ****@####.net -t *****@#####.de -t ***+++@####.de -m smtp.#####.de -a ****@####.net -w 'geheim' -i /var/tmp/myip.txt;
ncftpput -a -u ftpu**** -p <geheim> -P ***** <host> /uStor01/ /var/tmp/myip.txt;
rm -f /var/tmp/myip.txt;
;;
online)
# Kommandos wenn der Router online geht (zB Zwangstrennung)
#
noip2;
sleep 15;
pidnoip="$(pidof noip2)";
noip2 -K $pidnoip;
nslookup <yyy.dysdns.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" > /var/tmp/myip.txt;
nslookup <xxx.noip.org> | sed -e "/Address 1: /!d" | sed -e "s/Address 1: \([0-9.]*\).*/\1/" | sed -e "\$!d" >> /var/tmp/myip.txt;
get_ip -d >> /var/tmp/myip.txt;
uptime >> /var/tmp/myip.txt;
mailer -s "myFritz!Box IP-Status from: `/bin/date`" -f ****@####.net -t *****@#####.de -t ***+++@####.de -m smtp.#####.de -a ****@####.net -w 'geheim' -i /var/tmp/myip.txt;
ncftpput -a -u ftpuser -p <geheim> -P ***** <host> /uStor01/ /var/tmp/myip.txt;
rm -f /var/tmp/myip.txt;
;;
offline)
# Kommandos wenn der Router offline geht (zB Zwangstrennung)
;;
esac

So sehen die emails aus, die gesendet werden:
Betreff: myFritz!Box IP-Status from: Sun Oct 18 14:27:32 CEST 2009
Von: <*****@g####.net>
An: <*****@####.de>
Datum: 18.10.09 14:27:40 Uhr

xxx.xxx.203.211
xxx.xxx.203.211
xxx.xxx.203.211
14:27:32 up 1 min, load average: 2.37, 0.64, 0.21
 
Zuletzt bearbeitet:
Interessante Ideen... Ich habe allerdings einige Fragen und Bemerkungen.
1. Was ist eigentlich onlinechanged-cgi? Warum heißt es überhaupt cgi und wo kann man da die Shellbefehle eintragen?
2. Mit dem nslookup/ping. Ich würde doch schon mal zum ping neigen. Natürlich noch eine andere Eigenschaft von ping ausnutzen, nicht nur ein reines nslookup-Ersatz. Ich würde da eine for-Schleife einbauen und solange warten, bis ping erfolgreich ausgeführt wird oder die Anzahl der Wiederholungen (z.B. 10) erreicht ist. Nach dem recconnect vergehen nämlich normalerweise 30-90 Sekunden, bis die Adresse wirklich erreichbar ist. Der ping wird in diesem Fall normalerweise scheitern, weil es noch auf die alte IP gepingt wird. Dann kann man mit sleep 10 Sekunden warten und den ping wiederholen. Und das solange, bis es Erfolg bringt, oder die maximale Anzahl der Wiederholungen erreicht ist. Im Erfolgsfall kann man dann den Vergleich machen. Dort könnte man ebenfalls 3-5 Mal eine Schleife drehen, falls die IPs immer noch nicht passen.
3. Zu diesem mailer. Ich würde für diesen Fall wirklich den AVM-e-mail-Reporter nehmen. Dann kann man nämlich die ganzen smtp-Daten sich ersparen.
4. Die Geschichte ist WebIF-CGI-würdig. Man könnte/sollte daraus ein Paket machen, oder eben mit dem onlinechanged-cgi vereinigen.
5. dyndns-Host-Daten sollte man aus dem ar7.cfg auslesen.

MfG
 
Ein Ping an die alte Adresse kann eine Antwort geben, je nachdem, wer jetzt die neue Adresse hat. Das einzige, worauf es ankommt, ist, daß der UPdate erfolgreich ist und somit die eigene Adresse bei DynDNS hinterlegt ist. Ob von der alten Adresse eine Antwort kommt oder nicht ist nicht wichtig.
 
onlinechanged-cgi

Ich habe dann doch nslookup gewählt, wie von RalfFriedl empfohlen, weil nslookup ressourcenschonender ist als ping (festgestellt mit iptables durch Loggen). Ok den Zeitpunkt, wann ping oder nslookup ausgeführt werden soll, muss man ein-/abschätzen und im Script dann so ausführen lassen bzw. evtl. wiederholen (Schleife). Der noip-Client aktualisiert schneller, als das AVM-dynamic-DNS. Der Erfolg ist für mich dann eingetreten, wenn die IP-Adresse aus der Auswertung von nslookup, identisch ist mit der IP-Adresse die "get_ip -d" ausgibt.

Zwischen mailer und AVM-e-mail-Reporter (... wenn hier der Push Service gemeint ist), kann ich aus den erweiterten Headers kein Unterschied erkennen:

Push Service: erweiterter Header
Received: from [+++.+++.+++.221] (helo=fritzbox)
by smtp08.####.de with asmtp (TLSv1:AES256-SHA:256)
(yyyy.DE 4.110 #314)
id 1MzZnl-0000bt-00
for ####h@####.de; Sun, 18 Oct 2009 19:44:17 +0200
Message-Id: <[email protected]>
From: "FRITZ!Box" <#####@####.de>
To: <#####@####.de>,
Date: Sun, 18 Oct 2009 19:44:16 +0200
Subject: FRITZ!Box Push Service vom 18.10.2009
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="==AVM_Fritz_Box==multipart/alternative==1=="
Return-Path: #####@####.de
X-Sender: #####@####.de
mailer: erweiterter Header
Received: from [+++.+++.+++.221] (helo=fritzbox)
by smtp06.####.de with asmtp (TLSv1:AES256-SHA:256)
(yyyy.DE 4.110 #314)
id 1MzZtR-000444-00
for ####@####.de; Sun, 18 Oct 2009 19:50:09 +0200
Message-Id: <[email protected]>
From: <#####@####.de>
To: <#####@####.de>,
Date: Sun, 18 Oct 2009 19:50:09 +0200
Subject: myFritz!Box IP-Status from: Sun Oct 18 19:50:08 CEST 2009
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-Path: #####@####.de
X-Sender: #####@####.de
In der ar7.cfg finde ich mit:
Code:
# find /var/flash/ar7.cfg -exec grep -H "<dyn.dns.org>" {} \;
keine dyndns-Host-Daten.
 
@sf3978:
1. Ich hatte inzwischen im trunk gefunden, was dieses Patch macht. Letztendlich hat es mit dem cgi in meinem Verständnis wenig zu tun. Ich würde vorschlagen es doch Richtung eines WebIF-Paketes zu führen und in diesem Paket die Option anzubieten auch eigene Shell-Konstrukte einzubinden.
2. Doch, es gibt Unterschied zwischen dem wrapper und dem Binary. Den AVM-wrapper kann man auch ohne SMTP-Daten aufrufen, dann werden die vom AVM-WebIF genommen. Diese Lösung wäre für WebIF-Paket die Sinnvollste. Sonst muss man alle SMTP-Daten in freetz mit speichern. Ich poste meine Vorschläge, sobald ich es mir nochmal in meinen alten Skripts finde.
3. Dein find/grep-Konstrukt verstehe ich nicht. Kannst du bitte etwas rausholen. Ich weiß nicht, ob busybox-grep alle diesen Optionen (wie z.B. -H) versteht. Aber sei es rum. Das Problem liegt daran, dass AVM den Hostnamen verschlüsselt. Macht zwar wenig Sinn, aber sie machen es. Lass uns mal die Arbeit verteilen, ich kümmere mich ums Auslesen und poste hier meine Vorschläge.

MfG
 
3. Dein find/grep-Konstrukt verstehe ich nicht. Kannst du bitte etwas rausholen. Ich weiß nicht, ob busybox-grep alle diesen Optionen (wie z.B. -H) versteht.

Einträge die nicht verschlüsselt sind werden gefunden. Z. B.:
Code:
/var/mod/root # find /var/flash/ar7.cfg -exec grep -H "highoutput" {} \;
/var/flash/ar7.cfg:                        highoutput {
/var/flash/ar7.cfg:                        highoutput {
/var/flash/ar7.cfg:                        highoutput {

/var/mod/root # find /var/flash/ar7.cfg -exec grep -H "192.168.180.1" {} \;
/var/flash/ar7.cfg:        dns1 = 192.168.180.1;

EDIT:
Der Vollständigkeit halber, wie man mit telnet aus der Box emails abrufen (lesen) und senden (schreiben) kann:

Auch wenn man keine emails lesen will, vor dem schreiben muss man sich am POP3-Server anmelden (mit Benutzername und Passwort):
Code:
# [B]telnet[/B] pop.****.de [B]110[/B]
+OK **** POP3 StreamProxy ready
[B]user[/B] #####@****.net
+OK May I have your password, please?
[B]pass[/B] <geheim>
+OK Mailbox locked and ready
[B]list[/B]
+OK 4 messages
1 3787
2 19301
3 1296
4 1009
.
[B]retr 1[/B]
+OK 3787 octets
....
....
bla bla bla
....
....
.
[B]quit[/B]
+OK **** POP3 server signing off
Connection closed by foreign host
Jetzt kann man sich zum schreiben einer email am SMTP-Server einloggen:
Code:
# [B]telnet[/B] mail.****.de [B]25[/B]
220 mail.****.net **** Mailservices ESMTP {mp006}
[B]mail from:[/B]#####@****.net
250 2.1.0 ok {mp006}
[B]rcpt to:[/B]++++++@#####.de
250 2.1.5 ok {mp006}
[B]data[/B]
354 mail.****.net Go ahead {mp006}

das hier ist eine testmail.
nicht so interessant.
.
250 2.6.0 Message accepted {mp006}
[B]quit[/B]
221 2.0.0 **** Mailservices {mp006}
Connection closed by foreign host

EDIT2:
emails lesen und senden mit openssl:

openssl s_client -crlf -connect pop.xxxx.de:110 -starttls pop3

openssl s_client -crlf -connect mail.xxxx.de:25 -starttls smtp
 
Zuletzt bearbeitet:
pop before smtp wird tatsächlich noch mancherorts eingesetzt.
 
1. Wegen Einloggen per telnet auf einem pop3-Server. Das ist meiner Meinung nach das Letzte. Wenn der Provider es eben immer noch anfordert, dann den Provider wechseln. Wenigstens für diese Notifier-Funktionen. Es lohnt sich sowieso dafür eine separate E-Mail-Adresse anzulegen. AVM-WebIF bietet tatsächlich diese Möglichkeit nicht, dafür aber "sichere Verbindung". Und ich bin immer noch der Meinung, dass man den AVM-Notifier dafür nehmen sollte.
2. Wegen der ar7.cfg-Daten. Ich dachte, du hast da eine extra-kluge-geheime grep-Konfiguration rausgefunden. Aber dem ist es leider nicht so. Obwohl du da dem grep befielst auch nach schließenden Klammern zu suchen, tut er das nicht, weil weder grep noch sed es per se so können. Ich hatte gestern da meinen alten structcfg.sh rausgegraben (such einfach hier im Forum danach). Vielleicht lasse ich es dafür hier verwenden, obwohl ich it dem Skript nicht so ganz zufrieden bin und alleine dafür es für übertrieben finde.
3. Mit dem AVM-Push-Dienst geht es so (mehrfach so praktiziert):
Code:
OUTFILE="/var/tmp/myip.txt" # so, wie du es definiert hast
mail send -s "$(basename $0) Report" -d ${OUTFILE} -r
Frag mich nicht, warum ich -d genommen hatte anstatt -i. Ich glaube, bei -d wird es als Datei gesendet und nicht als inline-Text. Man könnte da die Sache noch weiter treiben und evtl. anstatt txt-Datei eine html-Datei nehmen, wie es AVM wahrscheinlich tut.
In meinem Fall wird "Skriptname Report" als Betreff genommen. Die Absenderkennung wird von AVM übernommen. Ich nehme mal an, dass man diese Kennung auch ändern kann.

MfG
 
Ich stimme dir in allen Punkten zu.

EDIT:
Code:
mail send -s "$(basename $0) Report" -d ${OUTFILE} -r
funktioniert bei mir nicht.
Code:
# mail send -s "$(basename $0) Report" -d /var/tmp/myip.txt -r
-sh: mail: not found
Dafür funktioniert aber:
Code:
mailer -s "$(basename $0) Report" -d /var/tmp/myip.txt -r
Betreff ist: -sh Report

OK. Muss der Push Service aktiviert bleiben, damit die Daten zur Verfügung stehen? Kann ich testen. Wenn ja, dann muss man zusätzlich 1x monatlich eine mail bekommen. Auch nicht schlimm.;)

EDIT2:
AVM-WebIF bietet tatsächlich diese Möglichkeit nicht, dafür aber "sichere Verbindung".
Eine Anmerkung zur sicheren Verbindung. Wenn ich mailer oder Push Service benutze, dann wird die Verbindung zum Provider über DPT 25 aufgebaut. Wenn ich aber eine https-Verbindung zum Provider aufbaue, dann geht diese Verbindung an DPT 443.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.