IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

Connexion TCP distante sans ouvrir de port


Sujet :

Développement

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Connexion TCP distante sans ouvrir de port
    Bonjour à tous !

    Je suis d'habitude cantonné au forum Python, mon premier langage de programmation et le seul dont je me sers vraiment mais dans le cadre de mes projets je suis amené à mettre une discussion du forum Python ici. La question touchant à pas mal de domaines en même temps, je l'ai mise directement sur le forum général. Je m'explique :

    Je développe des programmes (en Python) 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, mais ç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 mettre en place (quel que soit le langage, s'il y a une solution, je suis preneur) :
    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. Si vous avez une autre idée, je serais enchanté de savoir comment je peux faire !

    Merci d'avance de vos réponses !
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Un autre possibilité, c'est le protocole UPnP. Avec ce protocole, lorsque le serveur se lance, il envoie une requête UPnp (en broadcast probablement ou alors à sa gateway par défaut) demandant d'ouvrir un port spécifique.

    C'est supporté par beaucoup de box et aussi certains firewalls professionnels. C'est simple et souple (par contre, c'est un peu au détriment de la sécurité puisque cela ouvre un port sans que l'admin soit au courant ). L'utilisateur n'a rien à faire, cela sera pris en compte directement par ton équipement réseau (s'il support UPnP et si c'est activé)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    s'il était possible d'établir une connexion TCP entrante au travers d'un firewalll sans ouvrir le(s) port(s) cible(s), ça se saurait (hors VPN bien sûr, qui consiste à encapsuler)

    Et je ne vois pas comment tu pourrais "proxyfier" un TCP SYN pour l'envoyer au stack du serveur. Comment voudrais-tu déclencher ce paquet ?

    Steph

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    1) ok
    2) ok, pourquoi pas
    3) Comment est déterminer "s+1", comment le serveur sait que c'est "s+1", le moment d'envoyer sa réponse, puisqu'il n'a ps reçu la requete. Comment la synchronisation se fait (et se maintient au fil du temps)?
    De plus, il va être difficile d'envoyer une réponse si la requete n'est pas passée auparavant dans l'autre sens. Ce n'est peut-être pas le cas des box, mais de nombreux routeurs, ou les firewalls doivent filtrer ce genre de message
    4) Idem, il y a de forte chance que le routeur ou le firewall filtre en entrée ce genre de message, la réponse ne correspondant pas à une requete émise auparavant. Tu vas me dire que le client a bien émis la requete, mais la réponse ne peut, de toute façon pas correspondre puisque la requete puisque il est dit que le serveur n'a pas reçu la requete (dans le protocole TCP, les échanges se synchronisent sur des éléments qui font appel à un coté aléatoire lors de l'émission de la première requete par le client, et que donc le serveur, par définition, ne peut connaitre)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Tout d'abord, merci de toutes vos réponses !

    Citation Envoyé par sevyc64 Voir le message
    1) ok
    2) ok, pourquoi pas
    3) Comment est déterminer "s+1", comment le serveur sait que c'est "s+1", le moment d'envoyer sa réponse, puisqu'il n'a ps reçu la requete. Comment la synchronisation se fait (et se maintient au fil du temps)?
    De plus, il va être difficile d'envoyer une réponse si la requete n'est pas passée auparavant dans l'autre sens. Ce n'est peut-être pas le cas des box, mais de nombreux routeurs, ou les firewalls doivent filtrer ce genre de message
    4) Idem, il y a de forte chance que le routeur ou le firewall filtre en entrée ce genre de message, la réponse ne correspondant pas à une requete émise auparavant. Tu vas me dire que le client a bien émis la requete, mais la réponse ne peut, de toute façon pas correspondre puisque la requete puisque il est dit que le serveur n'a pas reçu la requete (dans le protocole TCP, les échanges se synchronisent sur des éléments qui font appel à un coté aléatoire lors de l'émission de la première requete par le client, et que donc le serveur, par définition, ne peut connaitre)
    Pour ce qui est de la synchronisation, je pensais utiliser, à défaut d'avoir un serveur à Ip fixe personnel, une boîte de messagerie. Après, mes connaissances sur ce type de protocole ne sont que théoriques, je n'ai pas regardé de code source permettant de mettre en place le protocole. C'est justement pourquoi je vous demandais s'il était, selon vous, possible de mettre en place ce genre de choses. Pour ce qui est de l'aléatoire, je pense envoyer tout ça en plus sur le serveur de messagerie. Même si ce n'est pour l'instant pas optimisé comme programme, je pense, pour tester, créer une messagerie (orange par exemple) ou un compte dans un stockage de fichiers en ligne, puis chaque ordinateur met son IP, ensuite quand l'un veut se connecter, il upload un fichier / envoi un e-mail définissant une heure de connexion (on suppose que les horloges deux ordinateurs seront synchronisés à quelques secondes près) et on s'en sert pour relayer les informations. Si le tout marche, on se servira de la connexion pour des flux en temps réel et plus sécurisés.

    Pour ce qui est du protocole UPnp, je me charge de regarder ses avantages, inconvénients et possibilités de compatibilité avec Python et je vois si ça vaut le coup d'adapter certains programmes avec ce protocole .
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stalacta Voir le message
    ensuite quand l'un veut se connecter, il upload un fichier / envoi un e-mail définissant une heure de connexion (on suppose que les horloges deux ordinateurs seront synchronisés à quelques secondes près) et on s'en sert pour relayer les informations. Si le tout marche, on se servira de la connexion pour des flux en temps réel et plus sécurisés.
    Mais ça ne résoud pas le problème d'ouverture de port TCP cible s'il y a un firewall le long du transit physique des paquets...

    D'autre part, TCP n'est pas adapté pour transporter des flux temps réel.

    Steph

Discussions similaires

  1. Connexion TCP distante sans ouvrir de port
    Par stalacta dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 10/06/2014, 18h12
  2. Réponses: 5
    Dernier message: 12/02/2014, 14h40
  3. Ouvrir 1 port TCP/IP sur 2008R2 ?
    Par agdid04 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 25/01/2013, 09h49
  4. Ouvrir un port en TCP et UDP en meme temps ?
    Par theclem35 dans le forum Réseau
    Réponses: 2
    Dernier message: 26/03/2011, 19h03
  5. Connexion TCP/IP sans carte réseau
    Par Grand2000 dans le forum Administration
    Réponses: 16
    Dernier message: 13/01/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo