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:
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:
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:
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