TP calcul adresse de sous-réseau

Vous devez redémarrer votre machine de la salle de TP sous Unix si elle est sous Windows.

Questions

Durant ce TP, vous allez réaliser une page web qui permet de saisir une adresse IPv4 et un masque de sous-réseau en notation décimale pointée et d'en déduire l'adresse du sous-réseau correspondant. Par exemple, si l'adresse est 192.168.3.12 avec un masque égal à 255.255.255.248, l'adresse du sous-réseau est 192.168.3.8/29. Pour obtenir l'adresse du sous-réseau, il faut, dans l'adresse saisie, mettre à 0 tous les bits qui se trouvent dans la partie machine de l'adresse. /29 est l'équivalent de 255.255.255.248 en notation /.
Le programme devra également vérifier la validité du masque saisi dans le formulaire.

Ce que vous devez faire dans ce TP ressemble fortement à ce que vous avez fait dans le TP Calculatrice. N'hésitez pas à revoir ce que vous aviez fait pour vous aider.

Connexion au serveur web, création du dossier et du fichier de travail

Dans cette partie, il s'agit de mettre en place l'environnement de travail.

Question

Connectez-vous avec ssh au serveur web lifrw.univ-lyon1.fr N'oubliez pas l'option -X pour pouvoir ouvrir des fenêtres depuis le serveur.

Une fois connecté au serveur, créez un dossier TP-calc-SR

Question

Allez dans le dossier TP-calc-SR et lancez un éditeur de texte, geany par exemple, pour ouvrir un fichier TP-calc-SR.php

Ajoutez dans ce fichier, le squelette ci-dessous :

<!doctype html>
<!-- TP-calc-SR.php -->
<html>
	<head>
		<meta charset="utf-8" />
		<title>  </title>
		<style type="text/css"> 
		/* Déclarez les styles ici */
		   
		</style>
	</head>
	
	<?php 
	/* Écrivez ici les fonctions php */
	
	?>
            
	<body>	
	
	</body>
</html>	

ATTENTION : tout ce que vous allez faire par la suite doit se trouver dans UN SEUL fichier, le fichier TP-calc-SR.php que vous venez de créer.

Mise en place de la page HTML, du formulaire et des styles

Dans les questions qui suivent, vous allez mettre en place une page HTML contenant 4 blocs div. L'image ci-dessous montre précisément ce que vous devez obtenir à la fin du TP.

Question

Dans le fichier TP-calc-SR.php, ajoutez dans l'en-tête votre NOM comme titre de l'onglet.

Question

Dans le corps de la page, définissez 4 blocs div à la suite dont les noms sont entete, formulaire, affichage et data

Question

Dans l'en-tête de la page, ajoutez entre <style type="text/css"> et </style> la structure CSS qui va permettre de définir les styles de chacun des 4 blocs définis auparavant.

Question

Dans le premier bloc, ajoutez son contenu comme il figure sur l'image. Sur la deuxième ligne, vous remplacerez ce qu'il y a sur l'image par votre numéro étudiant suivi de votre NOM et Prénom.

Question

Dans le deuxième bloc, ajoutez son contenu comme il figure sur l'image. Ce bloc contient un formulaire qui doit être soumis avec la méthode POST et dont l'action est de rappeler votre page TP-calc-SR.php

Sur la deuxième ligne du bloc, à l'intérieur du formulaire, placez une zone qui permet de saisir une chaîne de 15 caractères dont le nom doit être ip et la valeur par défaut celle visible sur l'image.

Sur la quatrième ligne du bloc, à l'intérieur du formulaire, placez une zone qui permet de saisir une chaîne de 15 caractères dont le nom doit être masque et la valeur par défaut celle visible sur l'image.

Sur la cinquième ligne du bloc, à l'intérieur du formulaire, placez un bouton de soumission du formulaire dont le nom doit être action et la valeur celle visible sur l'image.

Question

Dans l'en-tête, définissez les styles pour les deux premiers blocs afin d'obtenir un affichage conforme à l'image. Pour les couleurs, vous pouvez utiliser cette page.

Programmation PHP
Question

Dans le 4ème bloc de la page, ajoutez le code PHP qui permet d'afficher tous les éléments transmis au serveur par le formulaire comme cela apparait sur l'image. Vous utiliserez une boucle foreach comme cela a été vu en cours et en TP.

Question

Entre la fin de l'en-tête et le début du corps de la page, ajoutez une fonction PHP ip_and_masque($ip,$ma) qui retourne une adresse IPv4 sous la forme d'un tableau de 4 nombres. Les paramètres $ip et $ma sont eux aussi des tableaux de 4 nombres qui contiennent respectivement une adresse IPv4 et un masque de sous-réseau. Chaque nombre de l'adresse retournée est calculé en faisant un & (opérateur AND) entre le nombre de même indice dans $ip et celui dans $ma. Cette fonction met donc tous les bits de la partie machine de $ip à 0 et retourne le résultat du calcul qui est donc l'adresse du sous-réseau.
Attention : chaque nombre de $ip et $ma est une chaîne de caractères qu'il faut convertir en entier en utilisant (int). Par exemple, $a = (int) "240"; met l'entier 240 dans $a.
Exemple d'utilisation du & (opérateur AND) :

si $a = 12  (c'est-à-dire 00001100 en binaire)
et $b = 248 (c'est-à-dire 11111000 en binaire)
alors $a & $b vaut 8 car        00001100
                              & 11111000  
                             ---------------
                                00001000  (c'est-à-dire 8 en décimal)   

Question

A la suite de la fonction précédente, ajoutez une fonction PHP affiche_adresse($a) qui affiche, en notation décimale pointée, l'adresse IPv4 passée en paramètre. $a est un tableau qui contient les 4 nombres composant l'adresse IPv4. Vous devez utiliser une boucle for qui affiche à chaque itération un nombre de l'adresse suivi d'un . sauf à la dernière itération.

Question

Avant les deux fonctions précédentes, utilisez require_once() pour inclure lib-TP-calc-SR.php qui se trouve dans le dossier /var/www/public_html/LIB du serveur lifrw.
Ce fichier contient la fonction masque_en_slash($masque) qui prend en paramètre un masque de réseau en notation décimale pointée. Elle retourne 33 si $masque n'est pas un masque valide, sinon un nombre entre 0 et 32 qui indique le nombre de bits à 1 dans le masque. Par exemple, si $masque=255.254.0.0, la fonction retourne 15.

Question

Dans le 3ème bloc de la page, ajoutez le code PHP qui permet d'afficher (comme sur l'image) si le masque saisi dans le formulaire est valide ou non. Pour cela, utilisez la fonction masque_en_slash() de la librairie.

Si le masque est valide, ajoutez le code PHP qui permet d'afficher sur la 2ème ligne du 3ème bloc l'adresse du réseau comme cela est fait sur l'image. Pour afficher l'adresse du réseau, vous ferez appel à vos fonctions affiche_adresse() et ip_and_masque(). Utilisez la fonction explode() du langage pour obtenir un tableau contenant les 4 nombres de l'adresse IP et du masque saisis dans le formulaire. Pour afficher le masque en notation /, utilisez la valeur retournée lors de l'appel de masque_en_slash()

Pensez à bien tester tous les cas possibles de saisie (masque valide ou invalide) et à vérifier que l'adresse de réseau affichée est correcte.

Pour éviter le message d'erreur qui s'affiche tant que l'utilisateur n'a pas cliqué sur le bouton de soumission du formulaire, utilisez la fonction isset()

Question

Dans l'en-tête, définissez les styles pour les 3ème et 4ème blocs de la page afin d'obtenir un affichage conforme à l'image.

Questions bonus

S'il vous reste du temps, vous pouvez traiter les questions suivantes.

Question

Faites en sorte que l'adresse IP et le masque saisis dans le formulaire restent affichés dans la zone de saisie après soumission du formulaire.

Question

Dans le 3ème bloc, affichez le masque en bleu s'il est valide, en rouge s'il ne l'est pas.

Question

Ecrivez vous même votre fonction masque_en_slash($masque) et utilisez là à la place de celle fournie dans la librairie.