.titleBar { margin-bottom: 5px!important; }

Externe IP-Adresse auslesen

Dieses Thema im Forum "FRITZ!Box Fon: DSL, Internet und Netzwerk" wurde erstellt von hssuhle, 9 Juli 2005.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. hssuhle

    hssuhle Neuer User

    Registriert seit:
    16 Mai 2005
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo, *!

    Nachdem mich heute die DynDNS-Registrierung geleimt hat, möchte ich gerne regelmäßig meine externe IP-Adresse auslesen und mit dem DynDNS-Eintrag vergleichen.

    Leider erzählt mir die Box mit ifconfig aber nur, auf welcher Adresse sie das Modem anspricht (nämlich 192.168.179.1). Die externe IP-Adresse finde ich nirgends.

    Klar steht sie im Web-Interface. Da kann ich sie aber mit wget auch nicht auslesen...

    Gibt es hier jemanden, der einen Tip für mich hat?

    Herzlichen Dank schonmal!

    HSS
     
  2. wichard

    wichard IPPF-Promi

    Registriert seit:
    16 Juni 2005
    Beiträge:
    6,954
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    Aachen
    Möchtest Du das von Hand machen, oder scriptgesteuert? Wenn Du PHP-fähigen Webspace zur Verfügung hast, kannst Du die aktuelle externe IP beim Aufruf der Seite aus der Variablen $_SERVER['REMOTE_ADDR'] auslesen. Wenn Du dann die aktuelle Einstellung beim DynDNS auch noch irgendwie in das PHP-Script bekommst, kannst Du die beiden IPs direkt vergleichen und eine entsprechende Meldung ausgeben lassen.

    HTH,
    WIchard
     
  3. hssuhle

    hssuhle Neuer User

    Registriert seit:
    16 Mai 2005
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich hatte eher vor, ein script per cronjob laufen zu lassen.

    Und: Nur mal für mich als PHP-Laien: Wenn DynDNS meinen Eintrag ignoriert, also ins Nirvana zeigt, wie soll ich denn meinen Browser auf den richtigen Server lenken, so dass ich mir REMOTE_ADDR anzeigen lassen kann? :wiejetzt:

    Danke für weiter Hilfen!

    HSS
     
  4. wichard

    wichard IPPF-Promi

    Registriert seit:
    16 Juni 2005
    Beiträge:
    6,954
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    Aachen
    Du mußt das PHP-Script schon auf einem externen Server laufen lassen und nicht auf einem Rechner hinter der Box - sonst bekommst Du sowieso nur die interne IP... ;-)
    Ansonsten kannst Du auch externe Services wie http://www.AllesEDV.at/ip.asp benutzen, um an Deine IP zu kommen.
    Ob Du von einem Rechner hinter der FBF direkt aus der Box die aktuelle externe IP ablesen kannst, kann ich Dir leider nicht sagen, da ich gerade nicht an meine Box drankomme - ich sollte mal die Fernwartung einbauen...
     
  5. RB

    RB Aktives Mitglied

    Registriert seit:
    22 Juni 2004
    Beiträge:
    1,311
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Selbständiger Bitbeißer
    Ort:
    40883 Ratingen
    Moin!

    Hab für meine eigenen Belange das Minimal-Skript[php:1:ef6bd6dd2f]<?php
    print $_SERVER['REMOTE_ADDR'];
    ?>[/php:1:ef6bd6dd2f]
    auf einen meiner Experimentier-vServer gestellt. Der Link ist http://fo-pa.de/IP.php. Das Ergebnis ist die rein numerische IP-Adresse. Die sollte per wget sehr schön auswertbar sein...

    Steht natürlich zur freien Verfügung ;-)
     
  6. hssuhle

    hssuhle Neuer User

    Registriert seit:
    16 Mai 2005
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Danke, das ist sehr nett!

    Lieber wäre es mir allerdings, wenn ich irgendwie "von innen" die externe IP-Adresse auslesen könnte.

    Irgendwelche Ideen?

    Danke schonmal!

    HSS
     
  7. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,756
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    #7 olistudent, 9 Juli 2005
    Zuletzt bearbeitet: 3 Jan. 2006
    Mach doch einen ping auf die DynDns-Adresse. Solange der geht ist sie registriert und falls der nicht geht, machst du z.B. ein restart des multid.
    Ungefähr so:
    Code:
    #!/bin/sh 
    while (true); do
    while (ping -c 1 meinedyndns.mine.nu); do
    sleep 5
    done
    echo "restart multid"
    multid -s
    sleep 5
    multid
    done
    echo "finished"
    MfG Oliver
     
  8. hssuhle

    hssuhle Neuer User

    Registriert seit:
    16 Mai 2005
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hey, Leute!

    Ihr habt ja echt kreative Ideen!

    Scheint aber leider notwendig zu sein, ein Workaround zu basteln, weil offensichtlich das Modem in der Box so blöd verbaut ist, dass man nicht "mal eben so" die externe IP auslesen kann.

    Ich mache es jetzt per cronjob alle 10 Minuten über ein script:

    #!/bin/bash
    wget http://www.xxxxxx.de/ip.php --output-document=/var/data/my_ip
    MY_REAL_IP=`cat /var/data/my_ip`
    MY_DYNDNS=`host xxxxxx.homelinux.org | cut -d ' ' -f4`

    if [ "$MY_REAL_IP" == "$MY_DYNDNS" ] ; then
    exit 0
    else
    wget -q http://user:pass@members.dyndns.org/nic/update?hostname=xxxxxx.homelinux.org --output-document=/var/data/dyndns_antwort
    fi


    Danke an Euch alle für Eure Hilfe!

    HSS
     
  9. Pumbaa80

    Pumbaa80 Mitglied

    Registriert seit:
    17 Mai 2005
    Beiträge:
    374
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wie wärs denn mit
    Code:
    wget -O /var/tmp/indexseite "http://localhost/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home"
    Dann müsste man nur noch mit sed ein bissle rumbasteln (bin zu doof :oops: ), um die IP-Adresse aus der /var/tmp/indexseite auszulesen.
    Sie steht im Klartext hinter
    IpAdrDisplay("
     
  10. sascha

    sascha Neuer User

    Registriert seit:
    30 Sep. 2004
    Beiträge:
    165
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Guten Abend,
    In diesem Fall hilft dieses SED-Script:
    Code:
    sed -n 's/^.*IpAdrDisplay("\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)").*$/\1/p' /var/tmp/indexseite
    Hth Sascha
     
  11. Novize

    Novize Moderator
    Forum-Mitarbeiter

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    20,648
    Zustimmungen:
    30
    Punkte für Erfolge:
    48
    Beruf:
    Jepp!
    Ort:
    NRW
    Meine antwort darauf ist:
    Code:
    weitere telnet Verbindung aufgebaut
    #  sed -n 's/^.*IpAdrDisplay("\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)").*$/\1/p' /var/tmp/indexseite
    sed: /var/tmp/indexseite: No such file or directory
    #
     
  12. fritzchen

    fritzchen Aktives Mitglied

    Registriert seit:
    29 Dez. 2004
    Beiträge:
    813
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @novize:
    die indexseite musst Du ja auch erst runterladen, so wie Pumbaa es vorgestellt hat...
     
  13. Novize

    Novize Moderator
    Forum-Mitarbeiter

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    20,648
    Zustimmungen:
    30
    Punkte für Erfolge:
    48
    Beruf:
    Jepp!
    Ort:
    NRW
    :oops: - Ich schliesse mich dem Spruch von Pumbaa an: Ich bin zu doof...
     
  14. sascha

    sascha Neuer User

    Registriert seit:
    30 Sep. 2004
    Beiträge:
    165
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  15. Novize

    Novize Moderator
    Forum-Mitarbeiter

    Registriert seit:
    17 Aug. 2004
    Beiträge:
    20,648
    Zustimmungen:
    30
    Punkte für Erfolge:
    48
    Beruf:
    Jepp!
    Ort:
    NRW
    Ja, streu ruhig Salz in die Wunde ;)
     
  16. sascha

    sascha Neuer User

    Registriert seit:
    30 Sep. 2004
    Beiträge:
    165
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Man kann sich den Umweg über die Datei allerdings auch sparen, und piped die Ausgabe direkt in den Stream Editor. Das würde dann so aussehen:
    Code:
    PASSWORD="test" # Passwort ggf anpassen
    
    export REQUEST_METHOD="POST"
    export REMOTE_ADDR="127.0.0.1"
    export CONTENT_TYPE="application/x-www-form-urlencoded"
    POST_DATA="login:command/password=$PASSWORD"
    export CONTENT_LENGTH=${#POST_DATA}
    echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
    
    export REQUEST_METHOD="GET"
    export REMOTE_ADDR="127.0.0.1"
    export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home"
    cd /usr/www/html/cgi-bin
    ./webcm |
    sed -n 's/^.*IpAdrDisplay("\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)").*$/\1/p'
    
    [EDIT]
    Der neue Code arbeitet auch bei gesetztem Passwort und ohne den Umweg über wget. Basiert auf Fritzchens Lösung.
    [/EDIT]

    Gruß Sascha
     
  17. Pumbaa80

    Pumbaa80 Mitglied

    Registriert seit:
    17 Mai 2005
    Beiträge:
    374
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Fein.
    Noch ein Vereinfachungsvorschlag:
    Code:
    ./webcm | sed -n 's/.*IpAdrDisplay("\(.*\)".*/\1/p'
    tut's auch (anstatt ./webcm | sed -n 's/^.*IpAdrDisplay("\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)").*$/\1/p' ).


    Hat jemand eine Ahnung, warum an dieser Stelle der Aufruf des webcm aus einem anderen Verzeichnis heraus nicht zum gewünschten Ergebnis führt?
    (Auch wenn man bei getpage den absoluten Pfad
    /usr/www/all/htmlde/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home
    einträgt.)
     
  18. sascha

    sascha Neuer User

    Registriert seit:
    30 Sep. 2004
    Beiträge:
    165
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo Pumbaa80,

    Dein Verfeinerungsforschlag funktioniert natürlich auch. Mit der Einschränkung, das er nicht prüft, ob zwischen den Anführungszeichen wirklich eine IP-Adresse steht. Ein weiteres Problem könnte auftreten, wenn in der Zeile nochmal irgendwo Anführungszeichen Auftauchen. Zeigt er dann alles bis zum ersten Anführungszeichen oder bis zum letzten? Ich weis es nicht.
    Das würde dazu führen, das du hinterher ggf. noch prüfen mußt, ob du wirklich eine IP-Adresse bekommen hast.
    Etwas verkürzen (nicht vereinfachen) kann man es noch so:
    Code:
    sed -n 's/^.*IpAdrDisplay("\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)").*$/\1/p'
    Wobei diese Formulierungen auch nicht ganz richtig sind, da sie Adressen von 0.0.0.0 bis 999.999.999.999 akzeptiert. Etwas besser, aber viel zu kompliziert währe:
    Code:
    sed -n 's/^.*IpAdrDisplay("\(\(\([01]\?[0-9]\{1,2\}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}[01]\?[0-9]\{1,2\}\|2[0-4][0-9]\|25[0-5]\)").*$/\1/p'
    Dieser Ausdruck trifft 0.0.0.0 bis 255.255.255.255. Wobei wahrscheinlich 2 ungültige Adressen (abhängig von der Netzmaske) immer noch erlaubt sind.
    Wenn man davon ausgeht, das die Box keine falschen IP-Adressen ausgibt, würde wahrscheinlich auch das reichen:
    Code:
    sed -n 's/^.*IpAdrDisplay("\([\.0-9]*\)".*/\1/p'
    Wobei dieser Ausdruck jede Kombination von Punkten und Ziffern akzeptiert.
    [hr:b257dbcd48]Das Zeilenanfangszeichen ^ auf jeden Fall stehen lassen, da sich die Ausführungszeit auf der Box wesentlich verkürzt!

    Gruß Sascha ;)
     
  19. OctaVerba

    OctaVerba Neuer User

    Registriert seit:
    19 Sep. 2005
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Und noch ein Script!

    Code:
    ;
    ; AutoHotkey Version: 1.x
    ;
    ; Externe IP der Fritz!Box Fon (WLAN) ermitteln
    
     
    page1=http://fo-pa.de/IP.php
    page2=http://www.netikus.net/show_ip.html
    
    URLDownloadToFile,%page1%, %A_ScriptDir%\ip.txt 
    if ErrorLevel = 1 
      { 
        Progress,b2 w200 h200 zh15 ZY10 CBFFFFFF FM14 CTFFFFFF CW800000,,Die externe IP konnte nicht ermittelt werden!,
      } 
    FileReadLINE,extip,%A_ScriptDir%\ip.txt, 1 
    Progress, b2 w400 h50 zh0 ZY10 CBFFFFFF FM14 CTFFFFFF CW800000,,Die externe IP lautet: [ %extip% ],
    FileDelete, ip.txt
    sleep, 6000
    Progress, Off
    
    Dieses Script ist "nur" zum Anzeigen der IP. Kann aber entsprechend modifiziert werden.
     

    Anhänge:

  20. wichard

    wichard IPPF-Promi

    Registriert seit:
    16 Juni 2005
    Beiträge:
    6,954
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    Aachen
    Das läuft dann aber auf dem Windows-PC und nicht auf der Box selbst, oder?


    Gruß,
    Wichard
     
Status des Themas:
Es sind keine weiteren Antworten möglich.