Locktrick - So möglich?

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von SAR-71.

    Locktrick - So möglich?

    Moin,

    da ich z.Z. viel mit TCP arbeite, aber nur leider lokal testen kann - Router sei Dank - dachte mir, dass ich den Lochtrick anwenden sollte.

    Leider habe ich da nur sehr theoretisches Wissen und wollte euch Fragen ob meine Idee so funktionieren sollte:

    Server: Befindet sich hinter einem Router mit Firewall die sich nicht ausschalten lässt.
    In einem realistischem Zeitrahmen refresht er ein PHP-Script. Das Script gibt aus, ob es neue Verbindungen gibt.

    Will sich jetzt ein Client verbinden, so teilt er dem Server seine IP mit und bekommt im Gegenzug die IP vom Server.
    Dazu gibt es noch ein Script, welches eine Zeit runterzählt sobald einer der beiden sich drauf connected haben.
    Nun versucht der Client und der sich mit diesem "Timer" zu synchronisieren (sodass er lokal weiterläuft).

    Wenn die Zeit abläuft versuchen beide eine Verbindung auf dem selben Port herzustellen.


    Haben die dadurch jetzt eine Verbindung?


    Mfg.
    SAR
    Ich würde das eher mit UDP lösen, da TCP verbindungsorientiert ist und das die ganze Sache erschweren könnte.
    Der allgemeine Ablauf sähe so aus:

    Quellcode

    1. Client&Server: Beide hinter NAT, Client will Verbindung zu Server herstellen
    2. Transmitter: Server mit bekanntem Endpunkt und geöffnetem Port/ohne NAT, hilft beim Herstellen der Verbindung
    3. Server schickt ein Paket an Transmitter
    4. Transmitter speichert den Quell-Endpunkt von Server (12.34.56.78:1111)
    5. Client schickt ein Paket an Transmitter mit dem öffentlichen Endpunkt von Server (12.34.56.78:1111)
    6. Transmitter schaut, ob er mit dem Endpunkt eine Verbindung hat (in unserem Fall ja)
    7. Transmitter schickt Server den Endpunkt von Client (87.65.43.21:2222)
    8. Server schickt ein Paket zum Client, das verworfen wird
    9. - Wenn das NAT von Server nun für dieses Paket einen anderen Port genommen hat, ist der Lochtrick nicht möglich (1)
    10. Server schickt Transmitter, dass er Client ein Paket geschickt hat
    11. Transmitter schickt Client das OK
    12. Client verbindet sich mit dem Endpunkt des Servers (12.34.56.78:1111)
    13. Verbindung hergestellt
    14. (1) Wenn das Paket, das der Server an den Clienten schickt, einen anderen Endpunkt hat, sagen wir 12.34.56.78:1112,
    15. versucht sich der Client immer noch, sein Paket über Port 1111 zu verschicken, was von dem NAT vom Server verworfen wird.
    Das Ganze funktioniert nur, wenn die NATs die Ports nicht für jede Verbindung, die von einem lokalen Endpunkt ausgeht, neu vergeben, wie oben beschrieben.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „haiyyu“ ()

    Ich würde das eher mit UDP lösen, da TCP verbindungsorientiert ist und das die ganze Sache erschweren könnte.

    Per TCP ist der Lochtrick meines Wissens gar nicht anwendbar...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Da fehlt das Wort "simulieren". Wenn du ein Protokoll programmierst, das immer überprüft, ob die Nachrichten angekommen sind und ob sie richtig sind etc.
    dann ist es zwar kein wirkliches TCP mehr, aber egal...

    Und man benötigt nicht für die Verbindungsherstellung, sondern für die Verbindung an sich UDP...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    du lässt Client1 eine Verbindung zu einem Server aufbauen, damit ein Port temporär geöffnet wird...Nun will Client2 zu Client1 auf diesen Port connecten, als wäre Client1 ein Server, dies funktioniert aber nicht, da der Port ja bereits für eine offene Verbindung verwendet wird. Schließt Client1 die Verbindung zu dem Server, dann merkt das die Firewall und alles dazwischen und schließen den Port wieder, hier kommen gar keine Daten mehr rein.
    Das ist eben das Problem mit dieser Verbindung über TCP...
    Über UDP ist es egal, was Server oder Client ist, sobald Client1 irgendwas ins Netz schickt, obs nun ankommt oder nicht, wird dieser Port temporär geöffnet und es können Daten von jedem beliebigen Server/Client empfangen werden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---