Frage zum Port-Fprwarding mit C++



  • SeppJ schrieb:

    Hmm, gibt's da nicht irgendwelche Möglichkeiten, falls UPnP aktiviert ist?

    Und irgendwelche anderen schlimmen Tricks muss es auch geben, Skype ist dafür berüchtigt, ohne Konfiguration durch den Anwender Firewalls zu umschiffen (zum Ärger aller Admins).

    Da hast Du doch keinen Server auf dem PC, sondern einen Client.



  • Belli schrieb:

    Da hast Du doch keinen Server auf dem PC, sondern einen Client.

    Skype stellt aber eine p2p Verbindung her.

    http://de.wikipedia.org/wiki/Stateful_Packet_Inspection
    http://en.wikipedia.org/wiki/Session_Traversal_Utilities_for_NAT

    pumuckl schrieb:

    (Und falls du erwartet hast, dass du den Port heimlich forwarden kannst, um dir die Pornosammlung deiner Kumpels schicken zu lassen oder ähnliches - vergiss es. Ein Passwort für den Router brauchst du so oder so 🤡 )

    Nicht, wenn er einfach einen Client startet. Der wird nicht geblockt 😉



  • cooky451 schrieb:

    Belli schrieb:

    Da hast Du doch keinen Server auf dem PC, sondern einen Client.

    Skype stellt aber eine p2p Verbindung her.

    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.



  • 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.


Anmelden zum Antworten