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

Shell et commandes GNU Discussion :

Redirection script netcat


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut Redirection script netcat
    Bonnour a tous,

    Je rencontre un probleme de redirection avec netcat que j'utilise en serveur tcp avec un script de traitement de commande.

    J'ai un script serveur qui ecoute et renvoie sur mon script qui interprete:

    serveur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/sh
    nc -l -p 22222 | ./interpreteur_localcmd
    Et l'interpreteur se contente de faire un echo de ce qu'il recoit

    interpreteur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh
    while read entree
    do
    echo $entree
    done
    Si je l'utilise tel quel et que dans un autre terminal je lance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>nc localhost 22222
    >>TEST
    L'echo dans mon script interpréteur fonctionne bien.

    Probleme, si au lieu de lancer un client via netcat j'utilise un soft qui se connecte sur ce port il ne se passe rien...

    Pourtant, si je modifie mon serveur pour faire directement un cat sans passer par un script d'interpretation cela fonctionne (donc j'en deduis que la communication avec le soft est effective):

    serveur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    nc -l -p 22222 | cat

    Mon probleme vient donc de l'appel a interpreteur_cmd.sh, mais seulement lorsque je l'attaque via ce soft, car dans un autre terminal cela fonctionne...

    Une idée de la cause du problème ??
    Merci beaucoup d'avance car la je sèche :/

    PS1:Si mon serveur tcp est uniquement "nc -l -p 22222" et que je lance mon soft client, la connexion se passe bien et j'affiche dans le terminal serveur ce que le client envoie
    PS2:Lorsque j'utilise mon serveur avec le script d’interprétation, mon soft se connecte bien car même s'il ne se passe rien, des que je stop ce soft le script serveur se termine (d'ailleurs si quelqu'un sait comment ne pas terminer le serveur lorsque son client se déconnecte ou le redémarrer automatiquement), j'en déduis un probleme seulement au niveau de la redirection..

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu veux faire quoi avec ton netcat parce que ton interpréteur là je comprend pas son utilité vu que lui fait juste faire un echo

    c'est quoi ton but ?

    si c'est de le voir défiler tu n'as pas besoin de ça.
    et pour le rediriger encore moins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nc -l 1234 > filename.out
    suffirait.

    ou au contraire pour l'alimenter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nc host.example.net 1234 < filename.input

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Hello et merci,

    Pour l'exemple j'ai montre un interpréteur minimaliste mais un realité le but est d'avoir un serveur TCP qui interprète des commandes clients et renvoie le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    mkfifo /tmp/backpipe
    nc -l -p 22222 < /tmp/backpipe | interpreteur_cmd 1> /tmp/backpipe
    Mon serveur marche si j'utilise un client tcp via netcat dans un autre term mais pas si je lance mon soft client..
    Mon soft client tourne bien, si je demande au serveur de faire un simple echo de ce qu'il recoit cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    mkfifo /tmp/backpipe
    nc -l -p 22222 < /tmp/backpipe | cat 1> /tmp/backpipe
    Donc j'ai simplifié l'interpreteur pour au moins pour avoir un echo de ce qu'il recupere via read.

    Y a t il un moyen d'analyser les transferts de données entre le processus netcat et l'appel de mon script ou de ce qui transite via ma fifo ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    J'y pense est ce que ca peut venir de la non utilisation d'une séquence de fin de chaine ? au travers du pipe ou du read peut être il reste toujours en attente de data ?..
    Vu que ça marche quand j'utilise un client netcat peut être le fait de taper ENTRÉE écrit un caractère de fin. Quand j'utilise mon soft en client il marche ssi je n'utilise pas mon interpréteur mais directement cat (cat 1> /tmp/backpipe), donc peut être ça coince au niveau du read de mon interpréteur qui reste en attente de lecture ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Apres quelque recherche sur le net cela pourrait venir peut etre de la commande read qui suit un pipe.
    Entree E4 de cette FAQ:
    http://tiswww.case.edu/php/chet/bash/FAQ

    Mais alors la je vois pas comment contourner le probleme

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour

    l'E4 de la FAQ n'a pas de rapport avec ton problème, l'E4 traite de cecii :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    command | while read variable
    do : peu importe
    done
    echo "$variable"
    $variable n'est pas accessible en dehors de la boucle while.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par sone47 Voir le message
    serveur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/sh
    nc -l -p 22222 | ./interpreteur_localcmd
    Et l'interpreteur se contente de faire un echo de ce qu'il recoit

    interpreteur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh
    while read entree
    do
    echo $entree
    done
    Mon probleme vient donc de l'appel a interpreteur_cmd.sh, mais seulement lorsque je l'attaque via ce soft, car dans un autre terminal cela fonctionne...
    Je ne comprends pas tout... donc réponse à 2 balles:
    Es-tu sûr que l'interpréteur est effectivement appelé (attention au chemin commençant par "./")?
    interpreteur.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/sh
    echo "appel de l'interpreteur"
    while read entree
    do
    echo $entree
    done

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    en pipant vers od, à la place de ton script, tu verrait peut-être des caractères invisibles, qui empêchent la lecture, ou des différences qui justifieraient le comportement observé
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Redirection script NyroModal sur FF
    Par metal971 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/12/2011, 23h01
  2. Script: créer un rép. virtuel pour une redirection d'URL
    Par GentooGeek dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 06/10/2006, 18h08
  3. Réponses: 2
    Dernier message: 21/04/2006, 15h40
  4. Un script de redirection
    Par Furius dans le forum Langage
    Réponses: 29
    Dernier message: 21/11/2005, 02h21
  5. Script shell - Redirection
    Par GLDavid dans le forum Linux
    Réponses: 3
    Dernier message: 17/11/2005, 08h56

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