[Winsock] Eigene Internet-IP "auslesen" (Router)



  • Moin beisammen

    1. Ich habe SuFu benutzt, alle Threads die das Thema behandelt haben kamen zu keiner für mich möglichen Lösung

    2. Google spuckt für C++ ebenfalls keine relevanten Suchergebnisse aus (jedenfalls bis Seite 7)

    Also es geht um folgendes: Ich hab nen Programm, wo eine Computer den Server eröffnet und der andere als Client beitritt. Das ganze lief hier in meinem LAN zwischen meinem Rechner und meinem Laptop auch ohne weitere Probleme. Ob es über das Internet überhaupt läuft, kann ich nocht nicht sagen, ich gehe aber mal schwer davon aus.

    Das einzige Problem ist, dass derjenige, der den Server eröffnet (wenn die Verbindung übers Internet laufen soll), nicht extra auf irgendeine Seite ala. www.wie-ist-meine-ip.de gehen soll, sondern elegant im Programm seine InternetIP angezeigt bekommen soll. Ich sitze hier zu Hause hinter einem Router und ich gehe davon aus das 90% der Personen die mein Programm benutzen werden in der gleichen Situation sind und daher suche ich eine Lösung, mit der ich nicht wie bspw. mit GetHostByName meine interne LAN-IP sondern meine Internet IP auslesen kann.

    Habe auch etwas über eine Möglichkeit per MFC mit einem HTTP Request gelesen, allerdings wüsste ich 1. nicht wie das funktonieren soll, wenn man keinen eigenen Server hat und 2. handelt es sich um ein SDL Programm, in dem meines begrenzten Wissens nach zufolge keine MFC Befehle angewendet werden können?! (Hier bitte ich immer gerne um Belehrung).

    Würde mich über eine rasche, kompetente, eindeutig Antwort freuen.

    Gruß, Jonas



  • Mit der WinInet API (InternetOpen, InternetOpenUrl, InternetReadFile, InternetCloseHandle) z.B. die Seite http://checkip.dyndns.org runterladen und die IP extrahieren.



  • Genau eine Antwort dieser Art habe ich mir gewünscht xD

    Danke sehr, ich werde das umgehend ausprobieren.



  • schau mal in die FAQ!



  • also ich versteh das so

    server <-> router <-> WWW <-> router <-> Client

    auf serverseite isses ja egal da kannste ja listen(INADDR_ANY) machen ... deine router muss portforwarding machen und zwar von port XYZ nach ServerPort und ServerRechner

    viele router unterstützen DynDNS, du solltest dir am besten bei DynDNS einen account machen und die daten im router einstellen.

    alle clients brauhen dann nur die DNS-adresse anstelle von der IP (die adresse muss beim client natürlich vorher aufgelöst werden :p) und den Port XYZ den du weiterleitest zum server



  • Ceos schrieb:

    also ich versteh das so

    server <-> router <-> WWW <-> router <-> Client

    auf serverseite isses ja egal da kannste ja listen(INADDR_ANY) machen ... deine router muss portforwarding machen und zwar von port XYZ nach ServerPort und ServerRechner

    viele router unterstützen DynDNS, du solltest dir am besten bei DynDNS einen account machen und die daten im router einstellen.

    alle clients brauhen dann nur die DNS-adresse anstelle von der IP (die adresse muss beim client natürlich vorher aufgelöst werden :p) und den Port XYZ den du weiterleitest zum server

    wenn das ganze aber ein programm ist das (nennen wir das kind beim nahmen, es handelt sich um schach) dass quer durchs inet sausen soll, sprich jeder x-beliebige soll nen server aufmachen können ohne vorher bei ihrem router oder so was einstellen zu müssen...



  • Alternativ-Lösung:

    Viele Router (die meisten) verfügen über eine Statusseite, auf der die aktuelle IP abzulesen ist. Ein Programm zu schreiben, das die Inhalte dieser Statusseite ausliest, ist relativ einfach. Nachteil: Dieses Programm funktioniert nur mit diesem Router-Typ - für jeden anderen ist eine Anpassung nötig. Vorteil: Der Statusdienst des Routers ist IMMER verfügbar - DynDNS und andere Dienste nicht.



  • weouh .... jaaaa ... also das iss schon ne schwerere nummer ...wie macht man das eigentlich bei spielen wie CS ???? ich dacht immer das die UPNP benutzen um sich die ports zu triggern ?!

    MOOOHHHMENT das ja völlig neben dem thema !!! um einen server port zu öffnen brauchst du ja gar nicht wissen wie deine IP ist !!! (eigentlich nur um sie jemand anderem mitzusteilen denk ich mal)

    schaffst du es denn überhaupt eine verbindung wie oben beschrieben üder je einen router herzustellen ? (also manuell so mit ich sag dir miene IP und du connectest ? )

    EDITEDIT: versteh mich bitte nicht falsch, es ist schon ein wenig spät, aber mir will nicht klarwerden wie sich überhaupt jemand zu dinem server verbinden kann wenn routermäßig keine portweiterleitung eingerichtet ist ?!



  • upnp ist auf neu-ausgelieferten Router für gewöhnlich deaktiviert.
    Ansonsten ist upnp ziemlich gut dazu geeignet sowohl Ports zu öffnen als auch die wan-ip rauszufinden.

    Bei heise ist grob erklärt wie z.B. Programme wie Skype nen Loch in die Firewall (nen Router stellt ja quasi im übertragenen Sinne eine dar) bohrt:
    http://www.heise.de/security/artikel/82054

    Am einfachsten ist es jeglichen Traffic der normalerweise direkt von X nach Y geht, jeweils über eine Server-Anwendung (Z) die im inet liegt zu schleusen. Dann bauen X und Y jeweils ihre Verbindungen zu Z auf und Z vermittelt die Daten.

    Vorteile:
    - X und Y brauchen kein Loch in die Firewall zu bauen
    - X und Y müssen ihre eigene IP nicht unbedingt kennen, nur die von Z.
    - Relativ einfach zu programmieren
    - Z kann Listen mit allen Playern die zocken wollen an X und Y senden

    Nachteile:
    - Sämtlicher Traffic geht über Z: Einmal rein und einmal raus
    - Man braucht erstmal Z 😉
    - Je nachdem wieviele User gleichzeitig zocken wollen reicht evtl. ein Z nicht mehr
    - Z ist ein böser Kostenfaktor


Anmelden zum Antworten