Utilisation d'ordinateurs en réseau
TP numéro 3
21 février 2017
Jean Méhat et Rabah Mazouzi

Contenu du TP : utiliser HTTP

Le TP du jour contient l'utilisation des clients légers comme des machines autonomes ; la mise en œuvre des communications entre un client et un serveur via TCP ; l'observation et la construction des communications entre un navigateur et un serveur. C'est beaucoup alors ne trainez pas.

Ne sautez pas de question. Il vaut mieux n'avoir traité qu'une partie correctement que d'arriver au bout avec des erreurs ou en copiant les résultats de la voisine.

Les indications Copier (N) indiquent ce que vous devez recopier dans le fichier de réponses. Pour nous faciliter la communication, vous trouvez un modèle du fichier de réponses reponses-NOM.txt. Merci de convertir son contenu en iso8859-1 si nécessaire (avec iconv -t iso-8859-1 -f utf-8). Merci d'y remplacer NOM par votre nom avant de l'envoyer.

Utilisation du client léger comme client semi-lourd

Pour faciliter les opérations sur le réseau, il vaut mieux pendant la séance de Travaux Pratiques que chacun travaille sur sa propre machine, avec sa propre adresse réseau. On va donc commencer par se logger comme d'habitude sur le client léger mais en même temps, on va lancer un autre serveur X11 sur l'écran virtuel numéro 1.

À faire : basculer entre l'écran virtuel habituel et l'écran virtuel numéro 1 avec les touches CTRL+ALT+F1 et CTRL+ALT+F7. Sur l'écran virtuel numéro 1, vous devez voir un écran noir avec affiché login:. Copier (1) ce qui est écrit dans la ligne au-dessus du login.

À faire : sur l'écran virtuel numéro 1, se logger comme guest (mot de passe guest). Attention, rien de s'affiche pendant que vous tapez le mot de passe.

Vous vous trouvez maintenant devant un shell ordinaire, auquel vous pouvez donner des commandes ordinaires, comme dans un terminal qui recouvrirait tout l'écran.

À faire : lancer un autre serveur X11 avec la commande startx ; voir l'écran se colorier en gris. Constater l'apparition d'un menu quand on clique sur le bouton droit. L'interface graphique n'est ni GNOME ni KDE (les plus fréquents) mais OpenBox, qui est beaucoup plus simple.

À faire : ouvrir deux terminaux sur l'écran virtuel 1 et modifier leurs dimensions pour qu'on puisse les voir tous les deux sur l'écran. Dans la suite, je les nommerai TG et TD (comme Terminal de Gauche et Terminal de Droite). Quand n'importe lequel des deux terminaux fera l'affaire, je l'appelerai TEV1 (comme Terminal de l'Écran Virtuel 1). Copier (2) ce qu'affiche la commande who dans un de ces terminaux.

À faire : constater que les commandes du TEV1 ne s'exécutent pas sur les serveurs habituels mais directement sur le client (par exemple en comparant le contenu de /home). Copier (3) le nombre de fichiers présents dans /bin sur le TEV1 et la commande qui vous a permis de l'obtenir.

Utilisation de base de netcat

À faire : essayer de connecter un netcat au serveur qui écoute sur le port 1234 de la machine locale avec netcat localhost 1234 dans le TD; constater que ça ne fonctionne pas. Copier (4) le message d'erreur.

À faire : lancer un netcat qui écoute sur le port 1234 (un serveur) dans le TG avec netcat -l -p 1234 et constater que rien ne se passe : le serveur attend un client.

À faire : connecter un netcat (client) à ce serveur avec de nouveau netcat localhost 1234 dans le TD ; taper des lignes dans TD et dans TG et constater l'effet que ça produit.

À faire : constater que quand on tue un netcat (par exemple avec CTRL-C), l'autre détecte qu'il n'a plus d'interlocuteur et sort à son tour (le client ou le serveur, c'est pareil).

Facultatif : relancer les mêmes commandes après avoir tapé stty cbreak dans les terminaux ; idem après avoir tapé stty -echo (attention, les commandes seront un peu plus difficiles à taper ici). Pour revenir dans un état normal : stty sane.

Facultatif : récupérer l'adresse du client léger comme indiqué plus loin et refaire la même opération avec le serveur sur le client léger et le client sur langoustine ou calamar (le serveur par défaut des terminaux de l'écran virtuel numéro 7).

Netcat comme navigateur

À faire : comprendre la commande shell qui suit et récupérer une page web avec

	  $ (echo "GET / HTTP/1.0"; echo ) | netcat www.bocal.cs.univ-paris8.fr http
	
Copier (5) la ligne Date: de l'en-tête de la réponse.

À faire : quelle est la commande équivalente à entrer pour récupérer votre page web (le CV des TP précédents) de cette manière ? Copier (6) cette commande.

À faire : essayer de récupérer une page web avec netcat avec la commande qui suit :

	  $ (echo "GET / HTTP/1.1"; echo ) | netcat www.bocal.cs.univ-paris8.fr http
	
Constater que cela produit une erreur. Se rappeler qu'on a vu pourquoi en cours et résoudre le problème. Copier (7) la commande correcte.

Netcat comme serveur web

À faire : identifier le nom de votre client léger ; il y a de bonnes chances pour que ce soit txN.piscine.bocal.cs.univ-paris8.fr (en A160) ou txN.aqua.bocal.cs.univ-paris8.fr (en A164). Une méthode à peu près infaillible consiste à vous logger avec ssh sur un des serveurs du bocal (avec ssh votre-nom@langoustine dans un TEV1) puis à y demander votre identité avec la commande who am i : la colonne de droite de la réponse est le nom de votre machine. Dans la suite, j'utiliserai machine pour indiquer ce nom dans les commandes.

À faire : dans la barre d'espace de votre navigateur, tapez l'adresse http://machine:8000/fichier. Comprendre le message d'erreur. Copier (8) le message d'erreur.

À faire : lancer un serveur qui écoute sur le port 8000 avec netcat dans un TEV1.

À faire : dans la barre d'espace de votre navigateur, tapez l'adresse http://machine:8000/fichier. Constater ce qui apparait sur le TEV1 (c'est ce que le navigateur a envoyé au serveur). Copier (8bis) ces lignes envoyées par le navigateur à notre netcat. Observer le message en bas de la fenêtre du navigateur qui indique ce qu'il fait. Copier (9) ce message

À faire : taper des lignes quelconques dans le netcat (qui les transmet au navigateur) ; constater que le message en base de la fenêtre du navigateur n'est plus le même après la première ligne. Copier (10) le nouveau message.

À faire : tuer le netcat qui sert de serveur et constater l'effet que ça provoque sur le navigateur. Copier (11) ou plutôt décrire d'une phrase cet effet.

À faire : Refaire la manip précédente (serveur netcat et navigateur ordinaire) pour que le navigateur affiche une page qui contient "grasromain accentuéitalique". (Il faut que netcat réponde avec un message HTTP bien formé qui contient le HTML (mauvais style d'ailleurs) :

	  <!doctype html>
	  <html>
	    <head>
	      <meta charset=utf-8>
	    </head>
	    <body>
	      <b>gras</b>
	      romain accentué
	      <i>italique</i>
	    </body>
          <html>
	
Vous devez fabriquer une ligne de réponse et un en-tête adéquats pour ce message. Copier (12) la ligne de réponse et l'en-tête.

À faire : refaire la manip précédente avec une valeur trop grande pour le Content-length: ; Copier (13) ou plutôt décrire ce qui se passe alors.