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

Linux Discussion :

Comment faire un pipe sur les ports en utilisants les sockets?


Sujet :

Linux

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Par défaut Comment faire un pipe sur les ports en utilisants les sockets?
    Bonjour tout le monde!

    Bon voila j'ai un problem je veux implementer un pipe ( un pont) entre 2 ports , ce qui veut dire si je me connecte avec ma machine A sur le port 3000 de la machine B je serai redirigé vers le port 4000 de la machine C.

    A----->3000: B :portDeSortie-----------> 4000:C


    le principe est simple , c'est d'implementer un petit programme qu'on lancera sur (B) qui contient deux sockets une serveur qui fait l'ecoute sur le port et l'autre fais la connexion vers la machine C port 4000 pour renvoyer tout ce qui vient depuis le port 3000 vers la machine C et le port 4000.

    est ce que quelqu'un a une idée sur les bibliothéque a utiliser !? sachant que le programme doit fonctioner sur Linux.

    toute contribution ! ou lien ou tutorial proposé sera le bienvenue!

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    Salut,

    Je ne suis pas sûr, mais regarde du coté du select() ou alors des fork()...

  3. #3
    Membre éprouvé Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Par défaut
    salut,
    tu peux faire ça facilement en perl avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #!/usr/bin/perl -w
    use strict;
    use IO::Socket::INET;
    my $sock_rec = IO::Socket::INET->new(LocalPort  => 4672,
        Proto     => 'udp'
       )
                                            or die "Can't bind : $@\n";
    print "server up\n";
     
    my $sock_env = IO::Socket::INET->new(PeerPort  => 4672,
                                                PeerAddr  => 'localhost',
                                                Proto     => 'udp',
       )
                                            or die "Can't bind : $@\n";
     
    while (<$sock_rec> ) {
      $sock_env->send($_);
    }
    je ne suis pas pro en perl il y a peux etre des erreurs.
    Et je pense qu'il y a beaucoup plus simple au niveau outil reseau mais je n'arrive pas à retrouver.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Par défaut
    Citation Envoyé par Iloyo Voir le message
    Salut,

    Je ne suis pas sûr, mais regarde du coté du select() ou alors des fork()...

    Merci bien pour votre aide ! mais je pense que les fork c'est plutot de la programmation system pour manipuler les processus ! moi je veux juste faire un tunnel entre 2 port d'une machine afin de véhiculer a travers cette machine une connexion ( Socket ).

    Merci .

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Il "suffit" d'écrire un programme qui écoute sur le port 3000 (socket/bind/listen/recv), et qui se connecte sur le port 4000 de la machine C (socket/connect/send). Il lit les données sur la première socket, et les écrit sur la deuxième.

    Si ton système a cette fonction, tu peux même utiliser sendfile() pour transférer les données de la première à la deuxième, sans passer par un buffer intermédiaire.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Par défaut
    Citation Envoyé par matafan Voir le message
    Il "suffit" d'écrire un programme qui écoute sur le port 3000 (socket/bind/listen/recv), et qui se connecte sur le port 4000 de la machine C (socket/connect/send). Il lit les données sur la première socket, et les écrit sur la deuxième.

    Si ton système a cette fonction, tu peux même utiliser sendfile() pour transférer les données de la première à la deuxième, sans passer par un buffer intermédiaire.

    Merci bien , je pensais à ça moi aussi ,
    mais j'ai une ptite remarque /question , avec cette methode est ce que j'aurai les réponses qui seront renvoyé par la machine C ??
    car au au fait on suppose que je vais faire une connection similaire a un telnet mais qui est véhiculer par pipe dans la machne B .

    Merci

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    Telnet est a proscrire, il n'utilise aucun chiffrage ! D'autant plus que ssh gère déjà les tunnels de façon très simple :

    Il faut avoir un serveur ssh sur la machine B.
    Tu lances ensuite sur ta machine A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ ssh -NT -L 3000:C:4000  login@B
    Ou B et C sont les hosts des machines respectives.

    Il te suffit ensuite de te connecter sur le port 3000 de ta machine A (en localhost) pour papoter de façon transparente à C alors que le flux est chiffré et passe par B.

    http://www.institut.math.jussieu.fr/...unnel_ssh.html

Discussions similaires

  1. Faire un rollover sur une image en utilisant les coordonnées X & Y
    Par reman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/04/2010, 11h16
  2. Comment faire la recherche sur les tables
    Par teZone dans le forum WinDev
    Réponses: 4
    Dernier message: 23/10/2007, 15h36
  3. Comment faire un clear sur un beufferedImage toutes les x secondes!
    Par jlassiramzy dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 26/07/2006, 13h18
  4. Réponses: 4
    Dernier message: 10/05/2006, 17h19
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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