Externe IP-Adresse ohne UPnP oder Abfrage externer Seite bestimmen

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
3
Punkte
36
Update 5 (12.04.2007, 12:46): Ich hatte bei der Default-Methode (webcm) ab und zu das Phänomen, daß keine IP zurück geliefert wurde, ein paar Minuten später dann aber doch wieder. Ich vermute eine verlorene Login-Session und erfolglose Anmeldung mit Web-Paßwort. Daher poste ich mal eine Variante, die statt eines GET- einen POST-Request absetzt, wie es ursprünglich auch mal war. Evtl. hatte ich doch zu viel optimiert, um kürzeren Code zu bekommen.

Update 4 (11.04.2007, 04:50): Für die spätere ds-0.2.9_26-15 habe ich eine Version von /bin/get_ip eingecheckt, die dem Benutzer die Wahl läßt zwischen drei Varianten der IP-Ermittlung:
Code:
Shell script /bin/get_ip prints external IP to stdout, giving the
user a choice between three different methods:
  -w, --webcm    - webcm CGI handler method [default]
  -d, --dsld     - showdsldstat method (use only with kernel 2.6 firmwares)
  -e, --extquery - external site query method (ask whatismyip.org)
D.h., Nutzer einer FW mit vorhandenem showdsldstat können von dieser schnellen Methode Gebrauch machen. Standard ist die im Vergleich mittelperformante, vermutlich auf alten wie neuen FWs gut funktionierende Methode, webcm zu fragen, und als Fallback gibt es immer noch den langsamsten Weg, mit wget eine externe Seite nach der eigenen externen IP zu fragen.

Für alle, die das jetzt schon nutzen und auf ihren Boxen testen möchten, hänge ich das Skript als Dateianhang an diesen Thread. Die Datei entpackt sich nach root/usr/bin/get_ip, patcht also den Mod, wenn es im Basisverzeichnis entpackt wird.

Somit sind alle anderen bisher vorgestellten Lösungen sowie die Antworten bis einschließlich #20 aus meiner Sicht obsolet. Die alten Lösungsbeschreibungen werden mithin aus dieser Nachricht gelöscht, die Antworten bleiben natürlich erhalten. Basis der weiteren Diskussion ist ab jetzt die Version im Anhang. Falls vor dem Release noch Bugs entdeckt werden, freue ich mich, sie bis dahin noch fixen zu können.

Herzlichen Dank für die vielen guten Anregungen, insbesondere an linuxservice, spongebob und (passiv, aber entscheidend) buehmann.
 

Anhänge

  • get_ip.tar.bz2
    940 Bytes · Aufrufe: 44
  • get_ip_post.tar.bz2
    1,017 Bytes · Aufrufe: 33
Zuletzt bearbeitet:
kriegaex schrieb:
Patch: Externe IP-Adresse ohne UPnP oder Abfrage externer Seite bestimmen
Hi Alex, kannst Du mir DAU kurz erklären, wofür das gut ist? (ernst gemeint!)
Vielen Dank!
 
Für nichts, wenn Du die IP nicht kennen mußt, um irgendetwas zu erreichen wie z.B. Versand einer E-Mail mit der neuen IP beim Reconnect oder Neustart, damit Du einen Fallback für den Remote-Zugang hast, wenn mal wieder DynDNS down ist wegen DDoS-Attacken. Schau mal in den Thread E-Mail bei geänderter IP, dort sind auf den Seiten 1 und 2 ein paar Beispiel-Skripten unterschiedlicher Couleur.

Es gibt auch andere Einsatzzwecke, und die Box rückt diese einfache Info von sich aus ungern heraus. Mit ifconfig sieht man auf dem DSL-Adapter z.B. nur die Adresse 192.168.179.1. Die externe IP, die andere Server aus dem Internet sehen, wenn Du mit der Welt kommunizierst, kriegst Du nur umständlich heraus, indem Du einen Dienst wie http://whatismyip.org bemühst.
 
Danke

Hi Alexander,

kriegaex schrieb:
...um die Adresse indirekt vom DSL-Daemon zu erfragen. Eigentlich ziemlich einfach, die AVM-Web-Oberfläche macht es genauso.
Klasse, genau das habe ich schon lange vermisst, aber meine Versuche, den Deamon zu befragen sind immer kläglich gescheitert :-(

Besten Dank fürs "gekonnte" Programmieren!

Jörg
 
Das mit der IP verstehe ich bei manchen Boxen und Firmwares nicht so ganz.
Bei manchen Boxen wird das Interface 192.168.179.1 erkannt, bei anderen das Interface 192.168.178.1 (z.B. über die Funktion gethostbyname(fritz.box)).

Wenn jetzt ein Server auf 192.168.179.1 läuft (dsl-Interface), kommt leider nichts an. Ist zwar ein internes IP-Problem, aber vielleicht weiss einer was darüber?
 
Ist ein wenig OT, was Du fragst, aber trotzdem die Frage: Was kommt wo nicht an?
 
kriegaex schrieb:
Die externe IP, die andere Server aus dem Internet sehen, wenn Du mit der Welt kommunizierst, kriegst Du nur umständlich heraus, indem Du einen Dienst wie http://whatismyip.org bemühst.
Bei meinem FB-WebInterface kann ich meine externe IP ablesen. Oder hab ich jetzt so richtig dicke
icon11.gif
icon11.gif
auf den Augen?
 
Hi AO,

nee, du hast nix auf den Augen, aber genau dort ist die _einzige_ Stelle, wo ich verlässlich die WAN-IP ersehen kann.

Wenn ich diese für ein Script o.ä. benutzen will, kann ich leider nicht einfach irgendeine Variable auslesen oder ein ifconfig machen. Statt dessen gehen die meisten den Umweg über eine Anfrage "nach draußen", die diese IP zurückgibt. Sehr umständlich und nicht immer verlässlich.

Dieses Script simuliert nun den Aufruf, den auch das Webinterface macht und kann so die externe IP zurückliefern ohne auf andere Dienste angewiesen zu sein.

Mir ist zwar nicht klar warum AVM das so gemacht hat, aber ich kenne ansonsten keinen Weg, diese IP zu bekommen...

Ansonsten: Wenn du's nicht brauchst, es gibt ja auch noch andere, und wenn das Script bei mir funzt, bin ich froh drüber ;-)

Jörg
 
Achso, jetzt hab ich es endlich auch kapiert. Das Tool macht natürlich Sinn - sorry, falls es so rüberkam, dass ich das angezweifelt hätte. Ich bin aus reiner Spielnatur immer auf der Suche nach Gimmicks für meine FB, und dieses hier ist in der Tat sehr sinnvoll. Also nochmals danke für alle Rückmeldungen, Eure Geduld mit mir ;-) und natürlich Dir, Alex, für's Programmieren!
 
Hi,

... nee, war schon richtig angekommen.

Ich bin noch "leich am Kämfen" damit, weil ich (natürlich auch ein Spielkind) das ganze "noch direkter" aufrufen möchte. Da habe ich mal aus den Ergebnissen von buehmann (callmonitor) und diesem zuammengeschrieben:

Code:
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
export POST_DATA="connection0:pppoe:status/ip"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm

Leider hat die Box, auf der ich das momentan nur testen kann, ein PW für die GUI, deshalb bekommen ich dann nur ein:
Code:
Apr  4 18:07:44 webcm[3725]: MakeLanguagePath html=../html tail=login.html -> ../html/login.html
Content-type: text/html
Pragma: no-cache
Cache-Control: no-cache
Expires: -1

Aber mal sehen, vielleicht kriege ich das ja noch "direkt in ein Script"...

Grüße

Jörg

PS: Es geht übrigens auch anders, wie ich jetzt gelesen habe
http://www.wehavemorefun.de/fritzbox/Hilfsprogramme_/_Tipps_&_Tricks#Statusanfragen_per_UPnP
(scheinbar war ich damals etwas an der falschen Stelle beim Suchen :-( )
 
MaxMuster schrieb:
PS: Es geht übrigens auch anders, wie ich jetzt gelesen habe
http://www.wehavemorefun.de/fritzbox/Hilfsprogramme_/_Tipps_&_Tricks#Statusanfragen_per_UPnP
(scheinbar war ich damals etwas an der falschen Stelle beim Suchen :-( )

Ich weiß. Genau deshalb heißt ja der Thread auch "Patch: Externe IP-Adresse ohne UPnP oder Abfrage externer Seite bestimmen" Edit: Davon abgesehen, daß die UPnP-Methode relativ aufwendig und kompliziert ist, habe ich UPnP auch deaktiviert, weil ich ungern wildfremden Programmen die Herrschaft über meine NAT-Firewall (ich weiß, eine Firewall ist eigentlich was anderes, aber ich nenne sie trotzdem so) überlasse.

Die andere Idee kann übrigens so, wie Du sie geschrieben hast, nicht klappen. Dein POST-Request sagt dem Webserver, daß Du ihm einen CGI-Parameterstring in der Art ?var1=234&var2=bla schicken möchtest, also einen Satz vor Schlüssel-Werte-Paaren in Form eines Query-Strings, so wie er beim äquivalenten GET direkt in der URL stehen würde. Was Du dann aber schickst, ist etwas völlig anderes, nämlich ein Stück Webseite, die von einem Template-Mechanismus expandiert werden soll.
 
... peinlich

kriegaex schrieb:
Genau deshalb heißt ja der Thread auch "Patch: Externe IP-Adresse ohne UPnP oder Abfrage externer Seite bestimmen"
... nunja, also, ähm, mit dem Lesen ist das scheinbar so eine Sache. Und bezüglich der UPnP stimme ich dir schon zu, sowohl sicherheits- als auch "aufwand-mäßig".

...Und hätte ich noch mehr gelesen, hätte ich auch eine "Lösung", in der Richtung, wie ich sie "erfinden" wollte schon gefunden:
http://www.ip-phone-forum.de/showpost.php?p=548737&postcount=6
Warum findet man die "passenden Suchbegriffe" immer erst hinterher, wenn man sich schon "geoutet" hat???

Trotzdem wars nicht vergebens, _mir_ hat es wieder den gewissen Lerneffekt gebracht, da du mir meinen Denkfehler erklärt hast.
Bedankt!

Insgesamt ist deine Lösung aber deshalb "besser", weil sie nicht von der "Vorgabe" der Original-Webseite abhängig ist, sondern "direkt" die Abfrage schickt.


Jörg
 
Zuletzt bearbeitet:
Sehr hübsch. Länger als meine zwei Einzeiler, aber dafür auch nur eine Datei. Danke für den Link.

Edit: Habe kurz nachgedacht, ob ich das im DS-Mod durch die andere Lösung ersetzen soll. Ich habe mich dagegen entschieden und möchte kurz erklären, warum:
  • html/de/menus/menu2.html könnte sich ändern, dann müßte man - wie schon einmal - den sed-Befehl anpassen.
  • Die Webseite ist relativ groß und muß gefiltert werden, meine kleine Spezialseite liefert, solange es das entsprechende Template für den AVM-websrv gibt, immer genau die gesuchte Information: die externe IP.
  • Meine Mini-Seite kann man aus dem Browser bei Bedarf auch direkt ansurfen über http://fritz.box/cgi-bin/webcm?getpage=../ip.txt oder sie in einen Frame einbetten, wenn man die IP haben will.
  • Was ist mit dem Orangebox-Mod, wenn er verwendet wird und die AVM-Original-Seiten entfernt werden? Dann läuft der sed-Befehl vermutlich auch ins Leere.
  • Für die Integration in den Mod ist eine potentiell release-stabile Variante tendenziell besser, v.a. weil wir ja nicht wissen, ob es mit anderen Boxen oder anderen Brandings irgendwann mal einen anderen Seitenaufbau gibt.
 
Zuletzt bearbeitet:
... genau meine Meinung!
Deine Lösung hat den Vorteil, dass sie simpel und eben zukunftssicher ist.
(Obwohl es mich immernoch "nervt" dass der Webserver für so eine "popelige" Anfrage benötigt wird... Was hat sich AVM denn dabei wohl gedacht?!?)
 
Gottes und AVMs Wege sind manchmal unergründlich. Na ja, die Box ist ja nicht fürs Modding entworfen worden, daher braucht man mehr als das Vorhandene auch nicht aus Herstellersicht.
 
Oster-Update - kein Fw-Patch mehr nötig!

Ganz neuer Lösungsweg - siehe Posting #1.

@MaxMuster: So, jetzt hast Du, was Du Dir gewünscht hast (ich auch) - alles in einem Skript. Zwar wird webcm immer noch benötigt, aber das ist zu verschmerzen, denn das eigene Webseiten-Template und der wget-Aufruf sind entfallen. Viel Freude damit und frohe Ostern! :)
 
Bedankt!

Moin Alexander,
kriegaex schrieb:
@MaxMuster: So, jetzt hast Du, was Du Dir gewünscht hast
[...snip...]
Viel Freude damit und frohe Ostern! :)

Ist doch schön, wenn sich jemand damit richtig auskennt und aus Gedanken eine Umsetzung macht!

Danke an den "Osterhasen" und frohe Ostern gehabt zu haben!

Jörg
 
Hallo,

sorry, ich habe die Einzelheiten Deiner Lösung jetzt nicht genau verfolgt, also bitte ich um Nachsicht, wenn ich sie noch nicht verstanden haben sollte...

Aber... hätte nicht ein simples HTTP Post auf http://fritz.box/cgi-bin/webcm mit dem "üblichen" Login-Data für die FB (s.u.) gereicht?

getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Findex.html&var%3Alang=de&var%3Apagename=home&var%3Amenu=home&=&login%3Acommand%2Fpassword=myfbpassword

In der Antwort findest Du die IP doch z.B. hier:

IpAdrDisplay('xx.xx.xx.xx')

Oder ist das eigentlich genau das, was Du jetzt auch machst? :) Geht ganz ohne modden der Box...

Grüsse
 
Dann lies bitte nochmal, spongebob. Ich modde jetzt auch nicht mehr, das war nur die erste Lösung, auf die ich selbst gekommen war. Was ich wollte, war, ohne Parsen einer HTML-Seite auszukommen, die sich evtl. ändert, das ist release-stabiler. Außerdem ist es mit dem POST ja auch nicht getan, mit grep und sed filtern muß man ja anschließend auch noch, das ist auch nicht kürzer als mein Oster-Update.

Was ich allerdings jetzt noch im zweiten Update (siehe Thread-Beginn) gleich ändern werde, ist, den Login gleich in die IP-Anfrage hinein zu packen (so wie Du vorschlägst) und alles in einem einzigen GET (POST ist nicht notwendig und, wie ich eben bemerkte, scheinbar auch keine URL-Kodierung) zu machen. Damit ist das Skript dann zwar nicht mehr so ein nettes Lehrbeispiel (einmal POST, einmal GET, beides hübsch getrennt), aber dafür ein Einzeiler. Danke für Vorschlag!
 
Klar, parsen musst Du noch, aber das versteht sich ja von selbst. Ich habe immer nur gePOSTet, weil ich das einmal so beim Schnüffeln gesehen habe. Bei dem URL-Encoden wäre ich nicht so sicher, ich habe es auf jeden Fall immer gemacht.

Grüsse
 
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.