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 :

Netcat : Envoi de message


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut Netcat : Envoi de message
    Bonjour à toutes et à tous.

    Dans le cadre de mes études, je dois réaliser un mini serveur de discussion en utilisant Netcat.

    Le serveur.sh va écouter les clients et répondre en fonction de leur message :

    - TALK sujet ip port va renvoyer "LISTEN" si personne n'écoute déjà, sinon il renverra CONN ip port où ip et port sont celle du client ayant
    demandé l’ouverture du sujet.

    - LIST : donne la liste des sujets de discussion ouverts.

    Voici le code de mon serveur :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #!/bin/bash
     
    nbSujets=0;
    sujets=();
    ips=();
    ports=();
     
    if [ -r /tmp/backpipe ]
    then 
    	rm -f /tmp/backpipe 
    fi
    mkfifo /tmp/backpipe
     
    while read entree sujet ip port
    do
    	if [ "$entree" = "TALK" ]; then	
    		trouve=0;
    		itrouve=0;
     
    		y=$(($nbSujets - 1));
    		for i in `seq 0 $y`
    		do 
    			if [ "${sujets[$i]}" = "$sujet" ];then
    			trouve=1;
    			itrouve=$i;
    			fi
    		done
     
    		if [ "$trouve" == 0 ]; then
    			echo "LISTEN";
    			sujets[$nbSujets]=$sujet;
    			ips[$nbSujets]=$ip;
    			ports[$nbSujets]=$port;
     
    			nbSujets=$(($nbSujets + 1));
    		else
    			iptrouve=${ips[$itrouve]};
    			porttrouve=${ports[$itrouve]};
    			echo "CONN $iptrouve $porttrouve";
    			unset ips[$itrouve];
    			unset sujets[$itrouve];
    			unset ports[$itrouve];
     
    			nbSujets=$(($nbSujets - 1));
    		fi
     
    	elif [ "$entree" = "LIST" ];then
    		echo "+OK $nbSujets";
    		y=$(($nbSujets - 1));
    		for i in `seq 0 $y`
    		do 
    			echo ${sujets[$i]};
    		done	
    	else
    		echo "Aucune commande correspondante, utilisez TALK ou LIST";
    	fi	
    done
    Je lance mon serveur grace à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nc -l -k  12345 < /tmp/backpipe | ./serveur.sh 1> /tmp/backpipe
    Mon problème se situe au niveau de mon client que voici (il est encore basique et pas du tout fini) :

    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
    20
    #!/bin/bash
     
    if [ $# -ne 1 ] && [ $# -ne 2 ]
    then
    	echo "Erreur de paramètres"
    	echo "USAGE : client.sh ipServeur [sujet]"
    	exit 1
    fi
     
    if [ $# -ne 1 ]
    then
    	nc $1 12345
    	echo LIST
    fi
     
    if [ $# -ne 2 ]
    then
    	nc $1 12345
    	echo TALK $2 localhost 12345
    fi
    J'aimerai pouvoir envoyer via nc du texte, par exemple ici le contenu du echo, mais apparemment mon programme se bloque à nc et n’envoie pas la suite.

    Comment faire donc, sans taper moi même au clavier, envoyer le texte via nc ?

    Merci de vos conseils.

    Bouffe

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut
    J'ai continué mes recherches, et je suis tombé sur une solution qui à priori devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "LIST" | nc $1 12345
    Le soucis est maintenant que je n'ai aucun retour de cette commande.

    Normalement le serveur.sh devrait me renvoyer "+OK 0". Mais je ne parviens pas à récupérer sa réponse, par exemple en redirigeant la sortie.

    Mon but serait là de récupérer la réponse dans une variable.

    Voyez vous une solution ?

    Bouffe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de message
    Par bendev dans le forum ASP
    Réponses: 5
    Dernier message: 11/10/2004, 11h40
  2. Envoi de message entre 2 applications
    Par floweez dans le forum Windows
    Réponses: 9
    Dernier message: 30/06/2004, 16h34
  3. [MFC] Envoi de message
    Par leskritiques dans le forum MFC
    Réponses: 5
    Dernier message: 29/04/2004, 11h26
  4. Réponses: 13
    Dernier message: 14/01/2004, 16h35
  5. Envoi de messages MS DOS avec le IP
    Par asphp dans le forum Développement
    Réponses: 6
    Dernier message: 07/01/2004, 16h11

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