Frage zum Port-Fprwarding mit C++



  • Belli schrieb:

    Dazu benutzt es aber erst mal einen Server, an dem die Clients sich erst mal anmelden. Danach stellt der Server auf Anforderung die P2P - Verbindung zwischen den Clients her.

    Trotzdem schießt Skype so ein Loch in die Brandschutzwand und kann so quasi einen Server starten, ohne den Router fragen zu müssen. Mit etwas Gefrickel sollte es also möglich sein, eine Verbindung ohne "echten" Server herzustellen. (Eigentlich lustig, sollte ich mal basteln :D)



  • Wie gesagt, zuerst mal muss jeder Client sich an einem Server anmelden. Und wenn der TE dieses Problem gelöst hat, dann kann er wahrscheinlich für seine Zwecke auch ohne weitere Tricks seine Ziele erreichen.

    Wenn Du es mal basteln möchtest:
    http://de.wikipedia.org/wiki/STUN



  • Belli schrieb:

    Wie gesagt, zuerst mal muss jeder Client sich an einem Server anmelden. Und wenn der TE dieses Problem gelöst hat, dann kann er wahrscheinlich für seine Zwecke auch ohne weitere Tricks seine Ziele erreichen.

    Er kann IP/Port aber einfach eingeben lassen. Da brauchste keinen Server mehr.

    Belli schrieb:

    Wenn Du es mal basteln möchtest:
    http://de.wikipedia.org/wiki/STUN

    Das ist nett, aber den Link hatte ich oben schon gepostet 😉



  • cooky451 schrieb:

    Belli schrieb:

    Wie gesagt, zuerst mal muss jeder Client sich an einem Server anmelden. Und wenn der TE dieses Problem gelöst hat, dann kann er wahrscheinlich für seine Zwecke auch ohne weitere Tricks seine Ziele erreichen.

    Er kann IP/Port aber einfach eingeben lassen. Da brauchste keinen Server mehr.

    Aha ... wo willste denn mit IP/Port hin, wenn nicht auf einen Server? Der Punkt ist doch, dass zunächst mal BEIDE Clients auch nur einen ClientSocket benutzen, und einen Server brauchen, zu dem sie connecten können.

    cooky451 schrieb:

    Belli schrieb:

    Wenn Du es mal basteln möchtest:
    http://de.wikipedia.org/wiki/STUN

    Das ist nett, aber den Link hatte ich oben schon gepostet 😉

    Kacke, hätte ich wohl mal draufklicken sollen ...



  • Belli schrieb:

    Aha ... wo willste denn mit IP/Port hin, wenn nicht auf einen Server?

    Na, auf einen anderen Rechner 😕



  • Ja, aber da muss doch ein Server(Socket) lauschen ...?!



  • Belli schrieb:

    Ja, aber da muss doch ein Server(Socket) lauschen ...?!

    Ne, die Clienten vera*schen sich gegenseitig 😃



  • Ich hoffe, das ist nicht ernst gemeint ...



  • Belli schrieb:

    Ich hoffe, das ist nicht ernst gemeint ...

    Ehm.. warum 😕

    (Klar kannst du etwas das "bind()" aufruft als Server bezeichnen, aber den Router kratzt das nicht.)



  • Router? Lass den erst mal weg.
    Wenn ich auf einem Rechner keine Software habe, die auf irgendeinem Port lauscht:

    cooky451 schrieb:

    Belli schrieb:

    Ja, aber da muss doch ein Server(Socket) lauschen ...?!

    Ne, die Clienten vera*schen sich gegenseitig 😃

    wie soll ich dann damit Verbindung aufnehmen?



  • cooky451 schrieb:

    (Klar kannst du etwas das "bind()" aufruft als Server bezeichnen

    Wie würdest Du es denn bezeichnen?



  • Belli schrieb:

    Router? Lass den erst mal weg.

    Hä? Es ging hier doch um den Router 😕



  • Naja, es ging darum, dass ein Server hinter einem Router nicht ohne Port-Forwarding erreichbar ist. DU wolltest eine Verbindung zwischen zwei Clients OHNE Server herstellen:

    cooky451 schrieb:

    Belli schrieb:

    Ja, aber da muss doch ein Server(Socket) lauschen ...?!

    Ne, die Clienten vera*schen sich gegenseitig 😃

    um Dir DAS zu vereinfachen - weil ich keine Vorstellung habe, wie das gehen soll - solltest Du DAS ZUNÄCHST erst mal ohne Router machen ...



  • Belli schrieb:

    Naja, es ging darum, dass ein Server hinter einem Router nicht ohne Port-Forwarding erreichbar ist.

    Ist er doch. Sende ein UDP Paket an eine Adresse und warte auf die Antwort. So kannst du auch ohne im Router irgendetwas freigeben zu müssen eine Verbindung herstellen. Ob man ein Programm das "bind()" aufruft um etwas empfangen zu können jetzt Server nennt, steht auf einem anderen Blatt. Ich würde es nicht so bezeichnen.



  • cooky451 schrieb:

    Belli schrieb:

    Naja, es ging darum, dass ein Server hinter einem Router nicht ohne Port-Forwarding erreichbar ist.

    Ist er doch. Sende ein UDP Paket an eine Adresse und warte auf die Antwort. So kannst du auch ohne im Router irgendetwas freigeben zu müssen eine Verbindung herstellen.

    So kann ich auch eine TCP/IP - Verbindung herstellen, WENN ich denn eine Antwort bekomme. Wo aber soll die herkommen, wenn 'die Adresse' hinter einer Firewall sitzt?



  • Belli schrieb:

    Wo aber soll die herkommen, wenn 'die Adresse' hinter einer Firewall sitzt?

    Die Antwort wird einfach geschickt. Sie ist keine direkte Reaktion auf eine Anfrage, sondern muss natürlich ausgelöst werden. Die Anfrage dient nur dazu, den Router auf eine Antwort einzustellen.



  • Also:

    cooky451 schrieb:

    Ist er doch. Sende ein UDP Paket an eine Adresse und warte auf die Antwort.

    ich sende ein UDP Paket an eine Adresse, und dann

    cooky451 schrieb:

    Die Antwort wird einfach geschickt. Sie ist keine direkte Reaktion auf eine Anfrage, sondern muss natürlich ausgelöst werden.

    das kann doch nur dann funktionieren, wenn das von irgendwem - im Fall von Skype macht das der Skype-Server - gesteuert wird, denn mein Router wird eine 'Antwort' ja nur dann durchlassen, wenn sie von der Adresse kommt, an die ich mein UDP-Paket gesendet habe, und diese Adresse muss erst mal meine IP/Port wissen, und wann der richtige Zeitpunkt gekommen ist, um mir eine 'Antwort' zu senden.

    Ich bleibe also dabei: In diesem Fall braucht man erst mal irgendwo einen Server, auf den die Beteiligten connecten können; dieser kümmert sich dann über die bestehenden Verbindungen zu den beiden darum, dass die nötigen Informationen (IP/Port, Zeitpunkt) zur Verfügung stehen.

    Hier
    http://www.heise.de/security/artikel/Wie-Skype-Co-Firewalls-umgehen-270856.html
    ist ganz gut beschrieben, wie Skype es macht.

    Beachte:
    "Eine wichtige Aufgabe beim Gesprächsaufbau mit Skype übernimmt ein Vermittlungsserver, mit dem beide Kommunikationspartner in ständigem Kontakt stehen."

    Es ist letztendlich keine Lösung, die geeignet ist, dem TE das Port-Forwarding zu ersparen.



  • Belli schrieb:

    Ich bleibe also dabei: In diesem Fall braucht man erst mal irgendwo einen Server, auf den die Beteiligten connecten können; dieser kümmert sich dann über die bestehenden Verbindungen zu den beiden darum, dass die nötigen Informationen (IP/Port, Zeitpunkt) zur Verfügung stehen.

    Angenommen man möchte ein Spiel übers Netz spielen, aber jemand der eigentlich keine Ahnung von Routern hat, bzw. vielleicht nicht einmal Zugriff auf diesen hat, soll hosten, da sein Rechner am schnellsten ist. Dann wäre das die optimale Lösung und man braucht keinen Server dazwischen.



  • cooky451 schrieb:

    Angenommen man möchte ein Spiel übers Netz spielen, aber jemand der eigentlich keine Ahnung von Routern hat, bzw. vielleicht nicht einmal Zugriff auf diesen hat, soll hosten, da sein Rechner am schnellsten ist. Dann wäre das die optimale Lösung und man braucht keinen Server dazwischen.

    Dann skizzier doch mal kurz, wie das gehen soll?
    Der Host wartet auf Anfragen, auf die er Antworten schickt. Okay.
    Da er aber hinter einem Router hängt, bekommt er gar keine Anfragen, was also nun?

    cooky451 schrieb:

    Die Antwort wird einfach geschickt. Sie ist keine direkte Reaktion auf eine Anfrage, sondern muss natürlich ausgelöst werden. Die Anfrage dient nur dazu, den Router auf eine Antwort einzustellen.

    An wen wird die Antwort denn einfach geschickt? Woher hat der Host die Adressen, an die die 'Antworten' geschickt werden müssen? Und wodurch werden sie 'ausgelöst'?



  • ICQBoy1: Hey, lass mal zocken!
    ICQBoy2: Ok! Meine IP: 123.123.123.123
    ICQBoy1: Meine IP: 321.321.321.321
    ICQBoy2: Hab geschickt, Port offen.
    ICQBoy1: Verbindung steht!


Anmelden zum Antworten