Sockets - Verbindung zu anderem Rechner



  • Du vielleicht nicht, die Spiel aber schon.
    Wenn es im Router aktiviert ist, können die Programme die Portfreigaben selbständig über UPnP aktivieren.

    Das ist aber nur notwendig, wenn von außen Kontakt zu deinem Rechner aufgenommen werden soll.
    Also wenn dein Rechner als Server arbeitet. Aber genau das willst du ja.



  • Achso also könnte ich die Änderungen am Router programmtechnisch vornehmen und das würde sich auch gar nicht weiter auf die anderen Personen, beispielsweise meine Mitbewohner auswirken? Kennst du denn irgendeine Seite auf der man etwas über speziell diese Programmierung nachlesen kann?



  • Ich kenne keine Seite. Das läuft aber unter UPnP.
    Aber als Einstieg geht wohl auch http://de.wikipedia.org/wiki/UPnP#Praktischer_Einsatz

    Wenn du das über UPnP machst, musst du als Programmierer aber auch wissen was du tust.
    Aber dann kannst du auch den Router auf sichere Art und Weise manuell freischalten.
    Aber für Beides fehlt dir im Moment das Wissen.

    Wichtig ist, das du NAT verstehst.



  • Hm.. Ok danke erstmal für die Links hab mir das grade mal kurz angeguckt und werde mir das morgen auch nochmal ordentlich durchlesen!
    Aber dennoch finde ich das alles etwas konfus.. Man findet zu diesem Thema jede Menge Theoretische Infos, Von der Theorie her kann ich mir nun glaube ich auch sehr gut vorstellen wie das funktionieren soll, aber man findet nicht das geringste darüber wie ich nun das ganz mit C++ abwickeln kann ohne manuell irgendwas am Router einzustellen.
    Ich mein klar ich lege die Sockets an verbinde zu der ip meines DynDNS Accounts oder beispielsweise auch direkt zu WildChild.dnsdynamic.og, alles recht verständlich und auch umsetzbar. Aber ich bezweifel das ich nun "auf eigene Faust" rausfinde wie ich allein über meine Anwendung, also über den Server, den Router sagen kann über welche IP er nun auch erreichbar ist und über welchen Port. Also die IP und den Port von dem DynDNS Server.



  • Dem Router musst du gar nicht mitteilen, über welche IP er erreichbar ist. Das weiss er selber am Besten.

    Du musst dem DynDNS-Server mitteilen, welche IP-Adresse dein Router aktuell hat. Dafür gibt es Programme von den DynDNS-Anbietern die das auch beim einschalten vom Rechner machen.
    Die Fritz!Box kann das aber auch für dich erledigen (einmalige manuelle Einrichtung über die Weboberfläche).
    DynDNS vermittelt nur die IP-Adresse zu deinem Router.

    Den Port bestimmst du für deinen Server. Z.B 4711.

    Jetzt muss die Fritz!Box nur noch wissen, welchen Port von Aussen sie zu welchem Port nach Innen weiterleiten soll.
    Das kann wieder 4711 sein oder auch ein anderer.
    Leite Port 47110 weiter zu WildChildsRechner:4711

    Die Fritz!Box macht das DNS für ihr Heimnetz und kennt auch die Namen von den Computern innerhalb des internen Netzes.

    Zu den ganzen Protokollen gibt es die RFC. Dort steht eigentlich alles drin.
    Welche jetzt UPnP für Router beschreiben weiß ich nicht.



  • Hm.. Ok ich denke das habe ich verstanden.
    Ich habe nun grade mal angefangen zu Programmieren.. ein Server und ein Client sind fertig funktionieren auch soweit, jedenfalls wenn ich den Client nach einem Server auf 127.0.0.1 suchen lasse.
    Wenn ich nun aber z.B.

    addr.sin_addr.s_addr = inet_addr("inv151673.dnsdynamic.com");
    

    da nach einem Server suche findet er nichts. Ich habe aber nun auf meinem Rechner das Programm WinDNSdynamic am laufen und das ist soweit ich weiß auch mit den Account da verbunden.
    Ich nehme mal an das Problem ist einfach das der jeweilige Port nicht offen ist kann das sein?



  • WildChild schrieb:

    ...
    Wenn ich nun aber z.B.

    addr.sin_addr.s_addr = inet_addr("inv151673.dnsdynamic.com");
    

    da nach einem Server suche findet er nichts. Ich habe aber nun auf meinem Rechner das Programm WinDNSdynamic am laufen und das ist soweit ich weiß auch mit den Account da verbunden.
    Ich nehme mal an das Problem ist einfach das der jeweilige Port nicht offen ist kann das sein?

    Du kannst da auch "localhost" angeben. Klappt auch nicht.
    In diesem Fall liegt es daran, das inet_addr nur IP-Adressen umwandelt und keine DNS-Namen. Da brauchst du gethostbyname()
    Schau mal bei zotteljedi vorbei. (In der Navigation Auf Grundfunktionen klicken)
    Natürlich ist der ganze Rest auch interessant.

    Deine lokale IP-Adresse und deinen lokalen Hostname bekommst du in der Konsole mit ipconfig /all
    Um deine externe IP-Adresse zu ermitteln kannst du mal http://www.ip-adresse-ermitteln.de/ probieren.



  • Achso ja ok stimmt mein Fehler im Quelltext steht da die ip und mit gethostbyname() hab ich es auch schon probiert!



  • Hm.. Ich kriege das immer noch nicht so zum laufen wie es das sollte! Wenn ich zu 127.0.0.1 connecte läuft alles glatt aber wenn ich zu der IP des DynDNS Servers connencte funktioniert das nicht.. Könnte mir mal jemand weiterhelfen? MfG WildChild 😉



  • Mit der IP des DynDNS-Servers kannst du nicht viel anfangen, denn du willst ja die IP von deinem Rechner haben.

    Du fragst bei dem DynDNS-Server nach, welche IP zu dem DynDNS-Namen "inv151673.dnsdynamic.com" gehört.
    Du kannst die aktuelle Adresse auch von verschiedenen Webseiten erfahren, z.B. http://www.heise.de/netze/tools/meine-ip-adresse/

    Hast du auch schon den Port in der Fritz!Box weitergeleitet?



  • Ja die IP von dem DynDNS Server sntspricht schon der meines PCs.
    Es geht doch auf 127.0.0.1 auch ... Das verstehe ich dann nicht



  • 127.0.0.1 geht gar nicht über das Netzwerk, da es immer der Rechner ist, von dem die IP aufgerufen wird (localhost).

    Dann hat dein Rechner noch eine lokale Adresse 192.168.178.x (hinter der Fritz!Box)
    Hast du die schon mal probiert?

    Die Adresse, die der DynDNS-Server liefert ist die externe Adresse von der Fritz!Box.
    Du wirst feststellen, das dies eine andere Adresse ist als 192.....

    Welche Portweiterleitung hast du jetzt in der Fritz!Box eingerichtet?



  • Ich habe überhaupt keine Portweiterleitung eingerichtet ich will ja nicht jedes Mal wenn ich das Programm an einem anderen PC nutze den Kram in die FrotzBox eintragen müssen. Eigentlich sollte das alles vom Programm ausgehen.



  • Dein Router (die Fritz!Box) arbeitet als Firewall. Die lässt von sich aus keine Verbindung von außen nach innen durch.

    Wenn du kein Loch in die Firewall machst, hast du keine Chance.

    Das wurde aber alles schon mehrfach geschrieben.



  • Ja okay, aber das muss ja trotzdem Softwaretechnisch zu lösen sein... Wenn ich irgendein Onlinespiel spiele renne ich ja auch nicht jedes mal zum Router und öffne die Ports da, oder richte eine Portweiterleitung ein...



  • WildChild schrieb:

    Ja okay, aber das muss ja trotzdem Softwaretechnisch zu lösen sein... Wenn ich irgendein Onlinespiel spiele renne ich ja auch nicht jedes mal zum Router und öffne die Ports da, oder richte eine Portweiterleitung ein...

    Verbindungen von innen nach aussen sind ja auch kein Problem. Und der Betreiber des Onlinespiels wird wohl auch in seiner Firewall die entsprechenden Ports geöffnet haben.

    Verbindungen zwischen zwei (Endanwender-)PCs, die an Routern hängen, haben immer dieses Problem, wenn kein Server dazwischen steht.

    EDIT:
    Und ausserdem musst Du, wenn Du hinter Deinem Router eine Serveranwendung betreiben willst, nicht "immer zum Router rennen", sondern einmal einen bestimmten Port für diese eine Anwendung freischalten..

    EDIT2:
    ...oder eben diese Freischaltung von Deiner Serveranwendung aus per UPnP beim Router anfordern, was aber deutlich mehr Implementierungsaufwand ist.



  • Hast du beim Rathausbau in Schilda mitgemacht?

    Es geht um die Verbindung vom großen, weiten, gefährlichen Internet in dein kleines, sicheres Heimnetz (anders hereum ist es ja kein Problem).
    Ohne Loch in der Firewall/Router wird das nichts.


Log in to reply