Vous êtes sur la page 1sur 1

LO14

TD N6: NETCAT, le couteau suisse du rseau

1/ La commande netcat tablit une connexion avec


un serveur. Tout ce quil lit sur son entre standard,
il lenvoie au serveur, et tout ce que le serveur lui
envoie, il lcrit sur sa sortie standard.
netcat offre aussi une fonctionnalit serveur. Dans
ce mode dutilisation, netcat attend sur un port quun
client se connecte, puis tout ce quil lit sur son entre
standard il lenvoie au client, et tout ce que le client
lui envoie, il lcrit sur sa sortie standard. Le mode
listen est slectionn grce loption -l ; il faut
aussi loption -p suivi du numro de port sur lequel
couter.
Dans un terminal, lancer netcat en mode serveur sur
le port 8080 :
netcat -l -p 8080
Dans un autre terminal, lancer un client qui se
connecte ce serveur :

On veut galement que cette fonction reoive sur son


entre standard les requtes du client: c'est dire ce
qui est crit sur la sortie standard de netcat. Il faut
faire une sorte de boucle pour connecter la sortie
standard du netcat sur la droite lentre standard
d'interaction sur la gauche. Ceci peut tre ralis
grce un tube nomm. Le tube nomm est cr par
la commande mkfifo. Supposons que $FIFO soit le
chemin d'un tube nomm, alors on peut l'utiliser pour
rediriger la sortie de netcat dans l'entre
d'interaction:
interaction < "$FIFO" | netcat -l -p PORT >
"$FIFO"
Notez que lorsque "interaction" se termine, lentre
standard de netcat est alors ferme, mais netcat ne
clos pas pour autant la connexion internet. Pour
forcer netcat clore cette connexion ds que son
entre standard est ferm, il faut ajouter l'option -c:

netcat localhost 8080

interaction < "$FIFO" | netcat -c -l -p PORT >


"$FIFO"

Maintenant, les lignes que vous entrez dans le


terminal serveur apparaissent aussi sur le terminal
client et toutes les lignes que vous entrez dans le
terminal client apparaissent aussi sur le terminal
serveur.

3/ 2 fonctions sont dj crites (la fonction


commande-non-comprise et la fonction quit )

2/ Nous allons raliser un serveur grce un script


bash.
Etudiez le code du script serveur pour le
comprendre.
Pour pouvoir interagir avec le client, il faut pouvoir
lire la sortie standard de netcat pour obtenir les
requtes du client, et pour chaque requte on veut
envoyer une rponse sur lentre standard de netcat
pour quil la transmette au client.
On peut rsoudre une partie de notre problme en
utilisant un tube :
interaction | netcat -l -p PORT
o interaction est une fonction qui crit des rponses
sur sa sortie standard.

Vous devez crer une nouvelle fonction convert


qui transforme un texte en majuscule. Quand le client
envoie la commande convert avec un argument,
largument sera converti en majuscule (utiliser la
commande tr ).
Vous testerez ce serveur en vous y connectant grce
netcat. Si vous installez votre serveur sur une
machine distante, il suffit de remplacer localhost
dans la commande netcat du client en lui donnant
ladresse du serveur.