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 régulier
    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
    Points : 70
    Points
    70
    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 du Club
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Salut,

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

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Points : 92
    Points
    92
    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 régulier
    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
    Points : 70
    Points
    70
    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 émérite
    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
    Points : 2 505
    Points
    2 505
    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 régulier
    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
    Points : 70
    Points
    70
    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
    Futur 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
    Points : 6
    Points
    6
    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