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 :

transfert de fichier P2P : connexion ????


Sujet :

Développement

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut transfert de fichier P2P : connexion ????
    Salut à tous !

    Voila, j'ai developpé un ptit prog sympa en C++ qui me permet d'envoyer
    un fichier depuis un Pc vers un autre (socket, TCP/IP) l'un est serveur, l'autre client.
    Tout marche très bien... sauf que lorsque le PC serveur est derriere un routeur avec firewall je suis obligé de configurer le modem pour qu'il redirige les données qui arrivent sur le port que j'utilise vers le PC.
    (transfert via internet, en local pas de probleme)
    Bon c'est pas la mort sauf que un seul PC de mon réseau peut être serveur (a noter que je débute donc je me trompe peut-être)

    La question que je me pose alors est la suivante :
    Comment qui font les logiciel P2P pour effectuer une connexion entre mon ordi et ceux des autres utilisateurs sans que je configure quoique ce soit sur mon modem ???
    En plus plusieurs PC de mon réseau peuvent utiliser le même log P2P...


    Si quelqu'un pouvait m'expliquer ça seré sympa !
    Merci d'avance

  2. #2
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Ils ont exactement le même problème.

    Comme tu l'as dit le problème survient quand ton routeur voit une connexion entrante. Il faut lui indiquer quelle machine du LAN devra servir la connexion pour qu'il puisse rediriger les paquets. Quand tu te connectes à quelqu'un c'est une connexion sortante donc le routeur sait avec quelle machine du LAN il faut faire la liaison.

    De plus certains routeurs sont assez intelligents pour automatiquement rediriger les connexions entrantes vers le bon PC si il y a déjà une connexion sortante, mais ca ne marche que pour certains protocoles (ftp en particulier).

    Tu peux tout à fait avoir plusieurs serveurs, il suffit de les mettre sur des ports différents.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Déja merci de ta réponse vic

    si je comprend bien,
    en prenant emule comme exemple, deux emule tournant sur deux pc différent derrière le même routeur vont ouvrir 2 port différents pour recevoir ou envoyer (je sais pas si pour emule la reception se fait en tant que serveur ou client ??) leur fichier chacun de leur coté.

    mais comment un pc sait qu'un port est déja utiliser par un autre pc ?... et que de ce fait il doit en utiliser un autre

    et le probleme du passage du firewall reste entier pour moi !

    j'ai chopper les sources d'emule mais il va me falloir des année avant de trouver dans cette meule de foin l'aiguille qui m'interesse

    Les années je l'ai ai mais bon quelques ptits coups de boost seraient les bien venu

    Merci d'avance à tout ceux pouvant m'apporter n'importe quelle information me permettant d'avancer (même de qq centimètre)

  4. #4
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Salut,

    Le protocole emule fonctionne de la façon suivante : chaque client se connecte à un serveur central qui répertorie tous les clients connectées et leurs fichiers. Quand un client demande un fichier, il envoie la requête au serveur qui lui communique la liste des clients qui ont le fichier. Ensuite, le client demandeur se connecte chez un ou plusieurs des autres clients pour en télécharger une partie.

    Le logiciel emule fonctionne donc à la fois en client et serveur selon qu'il reçoit des données ou qu'il en envoie.

    Au niveau de la passerelle les choses se passent de la façon suivante :
    Les machines sur le LAN ont une ip privée non routable, et doivent passer par la passerelle pour accéder à Internet.
    Pour sortir du réseau, les paquets envoyées par le PC1 par exemple sont envoyés à la passerelle; celle-ci transforme le paquet de façon à lui donner une adresse source routable et donc pouvoir l'envoyer sur Internet. Cette transformation s'appelle du NAT, Network Address Translation, ou IP masquerading. Technique expliquée en détail en de nombreux endroits, cf google.

    Un petit dessin pour rendre ça plus clair. J'indique le nom des machines et entre parenthèses leur IP. La passerelle a 2 IPs, une interne et une externe au LAN :

    PC1 (IP_LAN_1) <-----> (IP_LAN_2) Passerelle (IP_Internet_1) <-----> (IP_Internet_2) Machine_distante

    Lorsque PC1 veut communiquer avec Machine_distante, il crée un paquet avec adresse de destination IP_Internet_2 et l'envoie à la Passerelle. Celle-ci effectue la NAT sur le paquet, et transforme l'adresse de retour avec sa propre IP IP_Internet_1. Il mémorise cette information pour plus tard.
    La Machine_distante réceptionne le paquet, le traite, et y répond éventuellement en envoyant un nouveau paquet à destination de la Passerelle, sur IP_Internet_1. Grâce à l'information stockée précédement, la passerelle sait que ce paquet est en réalité à destination de PC1, et effectue à nouveau une NAT pour transformer le paquet et l'envoyer à PC1.
    Cette opération est transparente pour les 2 machines, qui croient chacune communiquer avec la passerelle alors qu'en réalité elle ne fait que transmettre les communications ailleurs.

    Le problème d'une connexion entrante, c'est à dire de Machine_distante vers PC1 est plus complexe. En effet la passerelle ne sait pas a priori si Machine_distante veut communiquer avec PC1 ou PC2 ou toute autre machine présente sur le réseau. Il faut donc utiliser une autre technique appellée port forwarding pour transmettre la connexion au bon PC. Le port forwarding doit être fait manuellement, même si pour certains protocoles il peut être automatisé.
    Par exemple, si la passerelle reçoit une connexion sur le port 80 (port http) on pourra la paramétrer pour rediriger les paquets vers un serveur apache sur PC2 tournant sur le port 8080.

    Il en est de même pour emule, si emule sur le PC1 ouvre en écoute le port 4662, il faudra dire à la passerelle de rediriger les connexions entrantes sur le port 4662 vers le PC2. Une conséquence est qu'il est impossible d'avoir plusieurs serveurs écoutant sur le même port sur des PC différents, il faudra préciser un port différent pour chaque PC et paramétrer la passerelle en conséquence.

    Voilà j'espère que ca a rendu les choses un peu plus claires, et te permettra au moins de t'informer toi même des subtilités techniques de la chose.

    ++, vic

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Re vic !
    Un grand merci pour ton attention !

    De mon coté j'ai trouvé un complement d'information sur le
    "comment qui fait emule pour passer mon firewall sans que j'ouvre mon port ?"

    Tout simple... Avec emule je suis toujours client
    Apparemment a la connexion sur un serveur emule le serveur essaie de ce connecter a mon pc sur le port definie dans ma config emule et si il n'y arrive pas (à cause d'un part feu) il me concidere comme Low Id
    Ce qui signifie qu'en envoie ou en reception c'est moi qui me connecterai aux autres utilisateurs (Forcement des High Id qui eux ont leur port d'ouvert)
    Ce qui signifie aussi que tout les Low Id ne peuvent pas se joindre

    Voila l'article d'ou je tiens tout ça :
    http://www.ed2k.ch/modules/news/print.php?storyid=189

    Voila voila
    plus de mystère emule !

    Mais alors ... comment qui fait msn pour envoyer des fichiers ?
    Moi et mon pote on est tous les deux derriere des routeurs avec firewall
    et sa marche très bien sans configurer quoique ce soit !
    Je peut utiliser msn en envoi de fichier sur 2 PC de mon Lan sans problème !!! Alors qu'il sont censé avoir pour le serveur MSN la même IP non ?

  6. #6
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Ton routeur doit probablement gérer automatiquement le protocole msn.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    MSN gère l'UPNP qui permet (entre autres c pas fait que pour ça) à ouvrir des ports sur les firewall/ routeur nat automatiquement.
    MSN dit à windows : j'ai besoin qu'on mouvre tel port, win le dit au routeur qui le fait, après la connexion c l'inverse il dit qu'il peut fermer.

    Sinon si c'est pas possible tu peux le conf a la main, et si c vraiment pas possible ben alors vous vous connectez sur un serveur chez MS tous les 2 en tant que client, l'un envoie l'autre recoit depuis le serveur MS et tu te tapes sur ton msn "transfert lent bla bla bla"

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Salut ^^

    Je ne sais pas si tu as lu mon topic mais je fais un programme suivant le meme principe que le tien, et je voudrais savoir si tu as des problèmes de vitesse de transfert? Tu utilises les sockets ou les WSASockets? (ou meme autre chose :p)

    Si tu pouvais m'aider, ce serait très gentil merci ^^

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Je suis de même très interressé par les sockets , moi c'est en C/C++ sur Linux.

    J'ai lu par la quelque chose qui m'interresse:

    MSN dit à windows : j'ai besoin qu'on mouvre tel port, win le dit au routeur qui le fait, après la connexion c l'inverse il dit qu'il peut fermer.
    Depuis quelque temps que je cherchais a savoir ce qu'est l'UPnP, selon cette explication on pourrait faire ouvrir tous les ports que l'on voudrai au routeur d'une LAN avec juste un ptit prog qui gere UPnP ?? Trop bon cela me parait-il pour des attaques

Discussions similaires

  1. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  2. Réponses: 6
    Dernier message: 04/05/2005, 09h58
  3. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

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