externe IP-Adresse



  • Hi Leute,

    mit diesem Codeschnipsel lässt sich die IP-Addresse des Rechners ermitteln. Funktioniert auch wunderbar:

    char czHostName[255];
        char cIPAddr[15];
        struct hostent* host;
        UCHAR ucAddress[4]; 
        if(gethostname(czHostName,255)!=SOCKET_ERROR) {
            if((host=gethostbyname(czHostName))!=NULL) {
                ucAddress[0] = host->h_addr_list[0][0];
                ucAddress[1] = host->h_addr_list[0][1];
                ucAddress[2] = host->h_addr_list[0][2];
                ucAddress[3] = host->h_addr_list[0][3];
                sprintf(cIPAddr, "%i.%i.%i.%i", ucAddress[0], ucAddress[1], ucAddress[2], ucAddress[3]);
            }
        }
    

    jetzt wüsste ich gerne mal ob es eine Möglichkeit gibt die externe Ip-Adresse eines Routers zu ermitteln.

    Also der Router routet mehrere Rechner in einem Netzwerk ins Internet 🙂
    Auf einem dieser Rechner soll ein Programm laufen, dass die externe (natürlich dynamische) IP-Adresse des Routers ermitteln kann.
    Intern sind alle IP-Adressen statisch.

    Kann mir da einer helfen..

    [ Dieser Beitrag wurde am 23.01.2003 um 21:12 Uhr von tada editiert. ]



  • Geht nicht mit ner WinAPI-Funktion.
    Du könntest aber z.B. die Ausgabe von http://checkip.dyndns.org einlesen, wie es ein Codeschnipsel aus der FAQ macht - fragt sich nur ob dyndns.org das mag 😉



  • Ein interesantes Problem, mit dem wir uns auch recht lange herumgeschlagen haben, bis unser Guru uns eine Lösung lieferte: die meisten handelsüblichen Router sind über einen Browser konfigurierbar (unser via JavaScript). Was lag also näher, als ihn so anzusprechen:

    g_hInternetConnect = InternetConnect (g_hInternetOpen, "192.168.123.254/status.htm?RC=@", 80, 0, 0, INTERNET_SERVICE_HTTP, 0, 0);
    g_hHttpOpenRequest = HttpOpenRequest (g_hInternetConnect, "GET", 0, 0, 0, 0, INTERNET_FLAG_KEEP_CONNECTION, 0);
    HttpSendRequest (g_hHttpOpenRequest, 0, 0, 0, 0);
    InternetReadFile (g_hHttpOpenRequest, szBuffer, 1024, &dwRead);
    

    Bei unserem Router steht die IP (als String) nach der 28. spitzen Klammer (">"), der Domain Name Server nach der 52. und (für uns ganz wichtig!) die Connection Time nach der 60.

    Jetzt noch ein wenig HTML-Häkeln in der Art

    wsprintf (szBuffer, "<meta http-equiv=\"refresh\" content=\"0; URL=http://%s/\">", ...
    ...
    

    und ab dafür via FTP_Upload auf unseren statischen WEB-Space, damit unser WEB-Server wieder erreichbar ist 😉



  • Dies ist aber keine gute Lösung, da 1. die Router überall anders sind und 2. man sich bei einigen noch mit Passwort einloggen muss.
    Auch bei checkip.dyndns.org nachzufragen ist nicht sicher, bei mir (habe Proxy) würde es die IP des Proxyservers angeben.



  • Zuerst einmal danke an euch alle... 🙂

    Also JSFreak's Art und Weise passt mir eigentlich ganz gut. Ich soll dieses Programm für einen Schulkollegen schreiben. Daher brauche ich auch nicht groß an andere Router denken, sondern eben nur an diesen einen 😉

    Meine neusten Informationen sind, dass es möglich ist sich via Telnet Routerinfos anzeigen zu lassen. Unter anderem auch die externe IP-Adresse.

    telnet <interne-ip> <passwort>
    

    Demnach dürfte ich ja keine Probleme haben über Sockets eine Verbindung zum Router aufzubauen. Aber über welchen Port? 80?

    Ich frage mich auch gerade wie ich das Passwort da rein bringe?

    [ Dieser Beitrag wurde am 24.01.2003 um 13:23 Uhr von tada editiert. ]



  • naja Ich würde das hier in Die FAQ schieben 😉



  • Reine Statusinformationen wie die aktuelle IP sollten eigentlich bei allen Routern ohne Passwort abrufbar sein ...

    Wenn du einen hast, bei dem das anders ist, poste noch mal



  • So, also ich weiß jetzt genaueres.

    Das ganze ist auch durch einen Browser aufrufbar

    also z.B.:

    192.168.1.1/Seite.htm

    Danach werden Benutzername und Passwort abgefragt.
    Nur aus den Erklärungen meines Kollegen schliesse ich auf eine htaccess-Passwortabfrage.
    Ich frage mich nur wie ich Benutzername und Passwort übertragen muss bzw. welches RFC ich zur Rate ziehen sollte!?

    Ich hatte es einfach mal ohne Passwort und Benutzername versucht (also einfach nur verbinden und Seite auslesen), und habe dann das zurückbekommen:

    HTTP/1.1 401 Unauthorized
    
    WWW-Authenticate: Basic realm="Teledat DSL Router Komfort"
    
    Content-Type: text/html
    
    Server: ZyXEL-RomPager/3.02
    
    <HTML>
    <HEAD>
    <TITLE>Protected Object</TITLE>
    </HEAD>
    <BODY>
    <H1>Protected Object</H1>
    This object on the RomPager server is protected
    

    Kann mir da einer weiterhelfen?



  • Habe gerade mal nachgefragt ... also: wenn du bei deinem Browser
    http://192.168.1.1

    eingegeben hast, was erhältst du dann zurück?



  • Wenn ich nur http://192.168.1.1 eingebe, dann bekomme ich das:

    HTTP/1.1 401 Unauthorized
    
    WWW-Authenticate: Basic realm="Teledat DSL Router Komfort"
    
    Content-Type: text/html
    
    Server: ZyXEL-RomPager/3.02
    
    <HTML>
    <HEAD>
    <TITLE>Protected Object</TITLE>
    </HEAD>
    <BODY>
    <H1>Protected Object</H1>
    This object on the RomPager server is protected
    

    Wie gesagt, es werden eigentlich Benutzername und Passwort verlangt. Ich weiß nur nicht wie ich diese senden soll?!
    Ich denke, dass die URL durch eine htaccess-Passwortabfrage geschützt ist.
    Wenn man sich einloggt, dann findet man sich in einem Menü wieder, in dem man den Menüpunkt "Statistik" wählen kann. Darunter findet man also auch die externe IP.

    Ich denke mal, dass das ganze so ablaufen müsste:

    1. Verbinden zu 192.168.1.1
    2. Benutzername & Passwort senden
    3. Menüpunkt Statistik wählen
    4. Statistik empfangen und ausgeben

    Punkt 1 und 4 sind klar.
    Bei Punkt 2 und 3 habe ich keine Ahnung wie ich vorgehen soll.

    [ Dieser Beitrag wurde am 29.01.2003 um 23:05 Uhr von tada editiert. ]



  • Da drin ist Basic Authentication beschrieben:
    ftp://ftp.isi.edu/in-notes/rfc2617.txt



  • Dazu fällt mir nun wohl nix mehr ein ...

    ... höchstens noch der: http:\\80.134.17.154\rz239\ch_pic_85.jpg



  • Wie ich oben gelesen habe willst du die IP des Routers.
    Wenn es deiner ist dann mache doch ein Traceroute und Bingo du hast die IP.
    1.DeineIP
    2.RouterIP
    3.BlaIP...



  • @geeky: meinst du so geht das? na dann wer ich mir's mal reinziehen
    @JSFreak: lol
    @ReneS: darauf greife ich zurück, wenn nix mehr hilft 🙂

    danke euch allen 😃



  • hmm, also irgendwie bekomme ich das nicht hin.
    Das Problem ist, dass ich aus dem RFC nichts für mich verständliches rausnehmen kann.
    Kann mir einer von euch vielleicht erklären, wie ich mich durch ein cpp-Programm ganz einfach bei einer htaccess-Passwortabfrage einloggen kann?
    Ich müsste ja eine Verbindung zu der geschützen Seite aufbauen, und dann irgendwie Passwort und Benutzername übertragen ... nur in welcher Form?
    Oder hat denn schon jemand von euch dieses RFC durchgeackert und kann das jemanden wie mir deutlich machen 😉

    (Also jetzt erstmal ganz allgemein, und den Router beiseite lassen)


Log in to reply