Bonjour,
Je développe des programmes qui touchent au réseau depuis quelque temps : envoi de fichiers, diffusion de flux audio/vidéo... et je me sers beaucoup du protocole TCP, c'est d'ailleurs lui que j'aimerai utiliser pour résoudre mon problème. J'y viens : pour l'instant, dès que je veux établir une connexion hors réseau local, je dois ouvrir un port sur ma livebox (dans mon cas, ça peut également être un autre routeur). Dans ce cas, le serveur et le client peuvent s'envoyer des données même s'il n'y a que le serveur qui a un port d'ouvert sur son routeur. Outre les failles de sécurité potentielles, pour moi, la manipulation ne pose pas de problème, mais si je veux diffuser mon programme et qu'il soit utilisé par des gens qui ne s'y connaissent pas bien, j'aimerai trouver un autre moyen d'établir une connexion distante sans avoir besoin d'effectuer cette manipulation.
C'est alors qu'après de vaines recherches (à part avoir un vpn du genre hamachi qui ne me convient pas) que j'ai eu une idée mais je n'ai pas trouvé comment la faire :
Dans notre cas, on considère que les IP sont connues de chaque ordinateur.
1) Les deux futurs correspondants initialisent un socket
2) Un ordinateur "client" envoi une requête TCP via son socket, tout ce qu'il y a de plus normal, à une seconde s
3) A une seconde s+1, l'autre ordinateur (qui n'a pas reçu la requête puisque son routeur n'est pas configuré pour la rediriger) simule la réception du paquet - qui est connu d'avance par les deux ordinateurs - puis envoi une réponse
4) Là, normalement, je ne sais pas comment mais ça à l'air de marcher lors d'une connexion normale, le client doit recevoir le paquet même sans avoir configuré le routeur. Il renvoi le dernier paquet nécessaire pour valider la connexion. A partir de là les deux devraient pouvoir recevoir les données, ou au moins le "client"
Pour la première étape, pas de problème. Pour la 2ème non plus. C'est à partir de la 3ème que je ne sais pas comment faire, j'ai bien tenté de trouver des exemples de paquets réponse, je ne sais pas trop comment m'y prendre pour tout ça. Peut-être avec un paquet à IP usurpée envoyée à l'ordinateur par lui-même afin de "tromper" le socket serveur.
Je me demande comment on peut mettre cela en place, si c'est possible.
Merci d'avance !
Partager