Anleitung: EMail-Nachricht bei neuer IP-Adresse

MaHaGoNi

Neuer User
Mitglied seit
5 Sep 2007
Beiträge
154
Punkte für Reaktionen
1
Punkte
18
Hier habe ich schon viel gelernt und möchte nun auch mal etwas Nützliches weiter geben. Die Grundlagen hierfür kommen übrigens auch aus verschiedenen Quellen in diesem Forum:

Problem:
Wenn der Provider der FritzBox eine neue IP vergibt, dann soll eine EMail mit der aktuellen IP-Adresse verschickt werden. Wer beispielsweise DynDNS o.ä. nicht vertraut, der bekommt hiermit eine Lösung, ohne seine IP immer einem "Fremden" zu verraten.


Lösung:
Ein Script, das auf der Fritzbox 7170 läuft.

Zutaten:
- Fritz!Box 7170
- FW: egal, getestet seit der 29.04.15 bis jetzt zur 29.04.51 (incl. Labor)
- USB-Stick an der FritzBox 7170
- Dateien: debug.cfg, boot, ipwaechter.sh, getip.sh

Beschreibung:
1. Telnet aktivieren: auf Telefon #96*7* eingeben.
2. Auf USB-Stick Verzeichnis "cmd" anlegen.
3. FTP-Zugriff für USB-Stick aktivieren.
4. EMail-Einstellungen in Datei "ipwaechter.sh" anpassen.
5. Alle 4 o.g. Dateien auf Stick in Verzeichnis "cmd" kopieren (per FTP).
6. Per Telnet mit Fritzbox verbinden.
7. cp /var/media/ftp/USBDISKPro-Partition-0-1/cmd/debug.cfg /var/flash/
8. FERTIG

Ab jetzt kommt bei jedem IP-Wechsel eine EMail an die angegebene Adresse.

Hier die Dateien:
Alle in einer gepackten Datei (wahlweise tgz oder zip).

Gruß,
MaHaGoNi
 

Anhänge

  • cmd.tgz
    755 Bytes · Aufrufe: 101
  • cmd.zip
    1.1 KB · Aufrufe: 233
Danke MaHaGoNi
Hat auf Anhieb geklappt - nachdem ich die Box neu gestartet habe :)
Finde zu mailer keine weitere Beschreibung und darum meine Frage, wie bekomme ich Text in den body?
Gruß wgk
 
Hallo

Ich glaub MaHaGoNi war schon länger nicht mehr hier.
Schau dir doch mal den Parameter -i genauer an, zum Beispiel hier: KlickKlack
 
Achte auf die Feinheiten, hier gehts um Boxen die keine Pushmail im Webinterface haben.
Manchmal, wie bei meinen 7113er Boxen, muss sogar das Programm mailer noch extra draufgebracht werden.
 
Kannst du (oder auch ein anderer) mir bitte helfen. Ich will mit dem Script meine IP bei z.B. NOIP aktualisieren.
Aus der ar7.cfg habe ich mir 2 Zeilen raus gesucht:
Code:
dynupdate.no-ip.com:8245
/ducupdate.php?update=<b64>username=<username>&pass=<pass>&h[]=<domain>&ip=<ipaddr></b64>
Die aktuelle IP steht in $DSL_IP.
Wie müßte der Befehl jetzt aussehen? Ich dachte so:
Code:
wget http://dynupdate.no-ip.com:8245/ducupdate.php?update=<b64>username=susi&pass=geheim&h[]=susi.no-ip.org&ip=$DSL_IP</b64>
Aber da fehlen bestimmt noch einige "Sonderzeichen" und die <b64> bringt eine Fehlermeldung.
 
Zuletzt bearbeitet:
Klar helfe ich, gerne sogar.
Also alles was zwischen den beiden <b64> steht wird/ist: Base64 kodiert.
Das sind also Platzhalter, damit die Fritz!Box weiss: Aha ich soll das also kodieren!
Das kannst du erreichen, indem du die KonfigURL nicht an DynDNS sondern an deinen eigenen Server schickst und mal ausgibst.
Dann hast du denn Base64 kodierten String, den du dafür brauchst.

EDIT: Die busybox kann das auch: base64 heisst das Kommando.
Code:
deepbase # base64 -h
base64: invalid option -- h
BusyBox v1.21.1 (2013-07-08 10:56:01 CDT) multi-call binary.

Usage: base64 [-d] [FILE]

Base64 encode or decode FILE to standard output
        -d      Decode data

deepbase # base64 update.txt
dXNlcm5hbWU9c3VzaSZwYXNzPWdlaGVpbSZoW109c3VzaS5uby1pcC5vcmcmaXA9JERTTF9JUAo=
...und...
Code:
deepbase # base64 update.txt > updated.txt
deepbase # base64 -d updated.txt
username=susi&pass=geheim&h[]=susi.no-ip.org&ip=$DSL_IP
Ist wohl klar, dass nicht die Variablen, sondern ihr Inhalt in die Dateien, oder Pipe, rein muss. ;)

Am End sollte dein wget Kommando so aussehen...
Code:
wget http://dynupdate.no-ip.com:8245/ducupdate.php?update=dXNlcm5hbWU9c3VzaSZwYXNzPWdlaGVpbSZoW109c3VzaS5uby1pcC5vcmcmaXA9JERTTF9JUAo=
 
Zuletzt bearbeitet:
Riesen Dank! Habe es jetzt irgendwie hinbekommen. Bestimmt nicht schön, aber selten.
Du kannst ja mal verbessern:
Code:
echo "username=susi&pass=geheim&h[]=susi.no-ip.org&ip="$DSL_IP > ./update.txt
./busybox1.19.0LE base64 ./update.txt > ./updated.txt
echo "wget -O /dev/null http://dynupdate.no-ip.com:8245/ducupdate.php?update="$(cat ./updated.txt) > ./update.sh
chmod +x ./update.sh
./update.sh
2 Probleme sind aber noch:

1. Da das auf einer FB7170 und FB7050 laufen soll nimmt die 1,5 MB große busybox mir zu viel Speicher weg.
Da ich die Zeile aus der FB7170 habe, muß die FB das codieren doch auch mit ihren eigenen Dateien schaffen.
Aber in der originalen busybox ist base64 nicht mit drin. Wie macht die das dann?

2. Ich habe jetzt mal eine IP aktualisiert (nicht meine). Als ich die Domain dann angepingt habe bekam ich aber nicht die IP aus dem wget, sondern meine externe IP. Ist das normal? Dann brauche ich doch die IP in dem wget gar nicht mitschicken.
 
Zuletzt bearbeitet:
Moin

Naja, die Fritz!Box kann das ja irgendwie selber, ohne busybox und so.
Aber wie? Wahrscheinlich LUA oder Javascript.
Wenn du also einen eigenen PHP fähigen Webserver am laufen hast, dann kann die Fritz!Box diesen die KonfigURL schicken.
Damit du den Base64 String über den dann anzeigen und/oder abspeichern kannst.
Der könnte diese Aktualisierung dann auch zum DynDNS Server weiterleiten.
Ich aktualisiere gerade so ein Skript. Den Base64 String könnte man dort z.B. als Kommentar hinterlassen.
Oder nach dessen Erzeugung da rauskopieren und löschen.
Ich check mal...
Die KonfigURL in der Fritz!Box...
Code:
192.168.178.200/pubip/index.php?pw=<pass>&n=<username>&myip=''&web=''&webs=''&ftp=''&comment=<b64>username=<username>&pass=<pass>&h[]=<domain>&ip=127.0.0.1</b64>
Ausgabe des Base64 Strings im Kommentar....
Code:
Eintrag 5: LÖSCHEN
Kommentar:	dXNlcm5hbWU9NSZwYXNzPXNlY3JldCZoW109aXJnZW5kZWluZS5kb21haW4ub3JnJmlwPTEyNy4wLjAuMQ==
Stand von:	15.04.2014, 09:23 Uhr
WAN IP-Adresse:	''
FTP IP-Adresse:	''
Webserver IP-Adresse:	http://''
Gesicherter Webserver:	https://''
Das wäre eine Prozedur ohne busybox, aber mit lokaler oder externer entgegennahme des Base64 kodierten Strings.

Zu Problem 1: Nutze einen lokalen, oder externen PHP Webserver als Base64 Kodierer

PHP kann natürlich auch Base64 kodieren...
base64.php
PHP:
<?php
header('Content-Type: text/plain');
$str = $_SERVER['QUERY_STRING'];
echo base64_encode($str);
?>
Aufrufsformen:

/base64.php?Hallo%20Welt%21
Ergebnis: SGFsbG8lMjBXZWx0JTIx

Code:
deepbase # wget -O base64.txt http://busybox/pubip/base64.php?Das%20ist%20mal%20wieder%20ein%20Test%21

Code:
deepbase # curl -o base64.txt http://busybox/pubip/base64.php?Das%20ist%20mal%20wieder%20ein%20Test%21

Ergebnis (base64.txt): RGFzJTIwaXN0JTIwbWFsJTIwd2llZGVyJTIwZWluJTIwVGVzdCUyMQ==

Diesen "Dienst" könnten dann solche Boxen wie die FB7170 und FB7050, aber auch alte Schätzchen
wie 7112 oder 7113 mit wget nutzen, um ihre KonfigURL zu bauen.

Zu Problem 2:
Eventuell darf nur die IP die die KonfigURL sendet aktualisieren.
Dies gilt es herauszufinden.
Einen ähnlichen Mechanismus nutzt auch das pubip/index.php Skript:
/pubip/index.php?n=1&comment=AutomatischeIP&myip=
Hier wird die WAN IP nicht angegeben und das Skript setzt dann die IP des Aufrufenden Rechners ein.

TIP: Base64 decodieren, Tool: Firefox
Einfach den base64 in der Adresszeile des Browsers hinter...
Code:
data:text/plain;base64,
...einfügen, sodaß die Adresszeile so aussieht...
Code:
data:text/plain;base64,RGFzJTIwaXN0JTIwbWFsJTIwd2llZGVyJTIwZWluJTIwVGVzdCUyMQ==
 
Zuletzt bearbeitet:
Danke für deine Bemühungen, aber ich habe jetzt eine Variante ohne base64 gefunden.

Nach hier hat NO-IP schon vor 3 Jahren das update protocol geändert:
http://www.noip.com/integrate/request/
Code:
http://username:[email protected]/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4
Warum AVM, selbst in den neusten FW, noch das alte protocol benutzt?

Somit hat sich Problem 1 gelöst.

Zu Problem 2:
Gebe ich das neue protocol mit der IP in den Browser ein - geht es.
Die gleiche Zeile mit wget, dann nimmt NO-IP meine WAN-IP.
Weist du warum?

Da die FB7050 (wo das Script laufen soll) hinter einer EB802 ist, kann ich nicht die WAN-IP der FB verwenden.
Jetzt suche ich noch WEB-Seiten, die nur meine IP anzeigen, um so die richtige WAN-IP zu bekommen.
Bisher habe ich nur diese gefunden:
http://checkip.dyndns.org
Die gibt fast nur die IP zurück.
Damit läuft es so halbwegs, aber ich bekomme öfters ein timeout.
Kennt jemand davon noch andere Adressen?

So sieht das Script z.Z. aus:
Code:
while [ 0 -eq 0 ] ; do
        (
                
        OLD_IP=$(cat ./wan_ip.txt) 
        
	wget -q http://checkip.dyndns.org/
	while [ ! -e ./index.html ] ; do
		sleep 5
		wget -q http://checkip.dyndns.org/
	done

	cat ./index.html | sed -e "s/.*ss: \([0-9.]*\).*/\1/" > ./wan_ip.txt

        WAN_IP=$(cat ./wan_ip.txt) 
        
        [ "$WAN_IP" != "$OLD_IP" ] || exit 1
        
	datum=`date +"%d.%m.%y %H:%M:%S"`
	(echo $datum - $WAN_IP) >> ./wan_ip_log.txt

	wget -O /dev/null http://susi:[email protected]/nic/update?hostname=susi.no-ip.org
        )
        sleep 300
done

exit 0
 
Zuletzt bearbeitet:
"Gebe ich das neue protocol mit der IP in den Browser ein - geht es. Die gleiche Zeile mit wget, dann nimmt NO-IP meine WAN-IP. Weist du warum?"

Vermutlich: "Important: Setting the Agent
When making an update it is important that your http request include an HTTP User-Agent to help No-IP identify different clients that access the system. Clients that do not supply a User-Agent risk being blocked from the system."

Der UA von wget ist: HTTP_USER_AGENT: Wget
Ich kann mir vorstellen, das no-ip.com den blockt.
Kannste aber ändern: wget -U curl/7.31.0 ...

PS: Bei mir funktioniert anscheined nur diese Form der von dir geposteten URL:
Code:
curl base64EMailadresse:[email protected]/nic/update?hostname=domai.name
...mit curl aber nur wenn http:// nicht davorsteht.
Dann kommt ein "nochg" zurück. Was wohl bedeutet: IP address is current, no update performed. Followed by a space and the IP address that it is currently set to.

"Jetzt suche ich noch WEB-Seiten, die nur meine IP anzeigen, um so die richtige WAN-IP zu bekommen."
Hast du Webspace? Wenn nicht, frag doch mal @Rad ob er diesen Dienst auf fritzmod.net anbietet...
pubip.php
PHP:
<?php
header('Content-Type: text/plain');
$str = $_SERVER['REMOTE_ADDR'];
echo $str;
?>
 
Zuletzt bearbeitet:
Kannste aber ändern: wget -U curl/7.31.0 ...
Geht nicht. Antwort: nochg

wget -U Mozilla/5.0 ...
Geht nicht. Antwort: nochg

wget -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b5pre) Gecko/2008030706 Firefox/3.0b5pre" ...
Geht nicht. Antwort: nochg xx.xxx.xx.xxx <- meine WAN-IP, nicht die, die im wget steht

Aber such nicht weiter. Ist nicht sooo wichtig. Im Browser geht es ja.
Hatte mich nur mal interessiert.
 
Zuletzt bearbeitet:
Ich hab mal ein PHP geschrieben welches Besucher mit Zeit/Datum, IP und User-Agent logt,
und dann mal ein DynDNS Update hingeschickt,
die Fritz!Box gibt bei einen DynDNS Update diesen User-Agent an: Fritz!Box DDNS/1.0.1
 
Zuletzt bearbeitet:
wget -U "Fritz!Box DDNS/1.0.1" ...
Geht nicht. Antwort: nochg xx.xxx.xx.xxx <- meine WAN-IP, nicht die, die im wget steht
 
Das hier hat geklappt...
Code:
curl -H "Client-IP: 65.55.123.12" -o pubip.txt -H "User-Agent: Fritz!Box DDNS/1.0.1" http://dynupdate.no-ip.com:8245/ducupdate.php?update=Base64String
...wobei der Base64String so aussieht (dekodiert): [email protected]&pass=secret&h[]=verratichnicht.no-ip.org&ip=65.55.123.12
Rückgabewert war: verratichnicht.no-ip.org:1

Die IP 65.55.123.12 hab ich einfach mal erfunden, keine Ahnung ob die Jemanden gehört.

Mit wget gehts auch, grad getestet.
Code:
wget -O pubip.txt -U "User-Agent: Fritz!Box DDNS/1.0.1" http://dynupdate.no-ip.com:8245/ducupdate.php?update=Base64String
Es wurde dabei die IP im Base64 String genommen, und nicht die Klient IP.
Rückgabewert war: verratichnicht.no-ip.org:1 (Wenn der Update erfogreich war) 0=Kein Update notwendig, 2=Fehler

Funktioniert, soweit ich das sehe, nur auf das IP ändern, der Hostname muss schon eingerichtet sein via Webinterface von No-IP.org.
Dann klappt das IP ändern auch. Zum Beweis: Hab mal meine Gamecommunity dynamisch namendiensten lassen: http://koy.no-ip.info
 
Zuletzt bearbeitet:
Geht nicht. Antwort: nochg xx.xxx.xx.xxx <- meine WAN-IP, nicht die, die im wget steht

Dann hast Du die IP Adresse nicht in dem Format übergeben, wie sie erwartet wird, und es wird statt dessen die WAN-IP verwendet. Allerdings ist die WAN-IP sowieso fast immer die, die man haben will, von daher, was ist das Problem damit?
 
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.