Exercices Utilisation de l'API socket TPs Réseau API Socket - HTTP - WEB

Utilisation de l'API socket

Exercice 1 : Le protocole HTTP et le World-Wide-Web

Le but du WWW est de permettre la consultation à distance de documents multi -média hypertextuels. Ces documents sont composés dans un langage de balisage de structure appelé HTML (Hyper Text Markup Language). Il existe de nombreux logiciels clients WWW (Netscape Navigator, Internet Explorer, Mosaic, Lynx,…) ainsi que de nombreux logiciels serveurs (NCSA, Apache, MacHttp, …)



Question 1 : Utilisation du client Netscape Navigator

Lancer Netscape et naviguer dans les documents.
La commande "View Source" permet de visualiser le source HTML que le serveur a envoyé au client.
Expliquer sur un exemple de document à quoi correspondent les balises HTML 
La zone de saisie "Location" permet d'indiquer quel document on souhaite consulter.
Quelle est à votre avis la syntaxe adoptée ? Quel est le rôle des différentes parties ?

Question 2 : Le protocole HTTP


Le protocole utilisé par le WWW s'appelle Hyper Text Transfer Protocol (HTTP). Dans sa version actuelle (1.0), il s'agit d'un simple protocole de type "requête-réponse": le client demande au serveur le document HTML et le serveur le renvoie (voir figure).

On peut se connecter directement sur un serveur WWW en se logeant par TELNET sur le port 80 de la machine qui héberge le serveur WWW.

Lancer le logiciel TELNET en se connectant sur la machine cedric.cnam.fr
Pourquoi le système ne demande-t'il pas d'identification ?


La syntaxe d'une requête GET est GET <chemin fichier> <protocole> 
Essayer par exemple   GET /index.html http/1.0  suivi de 2 retour-charriot   Que retourne le serveur ?
Essayer ensuite  GET /toto.html http/1.0
Que retourne le serveur ? Que se passe-t'il pour les images ?

Exercice 2 : Un client HTTP minimal

En utilisant les IPC internet, l'interaction client-serveur se réduit à l'automate suivant : 

Pour utiliser les IPC internet, il faut inclure dans son code C les déclarations suivantes : 

#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>

Voici les primitives nécessaires : 

/* conversion d’une numéro de port au format interne */
unsigned short int  htons(unsigned short int);
/* copie de zone mémoire */
void bcopy  (void * src, void *  dest, int n)  ;
/* Obtenir l’adresse IP d’une machine à partir de son nom */
struct hostent  *gethostbyname (char *);
/* Créer une nouvelle socket ; retourne une descripteur de fichier */
int socket (int family, int type, int protocol);
/* Donner une adresse à une socket*/
int bind (int sockfd, struct sockaddr *my_addr, int addrlen);
/* Ouvrir une connexion */
int connect (int sockfd, struct sockaddr *serv_addr, int addrlen);
/* Prépare une socket serveur pour accepter N connections */
int listen (int sockfd, int n);
/* Attend une connexion ; quand une connexion arrive créé une nouvelle socket */
int accept (int sockfd, struct sockaddr *peer, int *paddrlen);


Avec les structures de données suivantes: 



Question 1 :

En utilisant l’automate présenté précédemment, écrire un petit programme en C  qui va récupérer le contenu d’un fichier disponible sur un serveur ‘httpd’, à partir de son URL. 

Ce client ‘http’ va se connecter au serveur ‘httpd’ avec une socket en mode TCP, puis va émettre un ordre GET chemin HTTP/1.0, puis affichera le flux d’informations retourné par le serveur.

Exemples d’utilisation de ce programme : 

%geturl lmi17 /index.html
%geturl cedric.cnam.fr /ABU/BIB/index.html


Question 2 :

Écrire un script shell  getHREF qui utilisera le programme précédent pour afficher  tous les URL contenu dans le fichier.

Exemples d’utilisation de ce programme : 

%getHREF lmi17 /index.html
%getHREF cedric.cnam.fr /ABU/BIB/index.html


Question 3


Notre client http geturl est trop rapide.
Ecrire une variante de celui-ci  qui lit à la vitesse de 1 caractère par seconde toutes les informations envoyées par le serveur http.

Exemples d’utilisation de ce programme : 

%lentgeturl lmi17 /index.html >tmp &
%lentgeturl lmi17.cnam.fr /Meteo/satt0.gif >tmp &


Visualiser l'état des sockets sur le client et le serveur avec la commande netstat.
Expliquer l’état des tampons.
           

Article plus récent Article plus ancien

Leave a Reply