Vous devez redémarrer votre machine de la salle de TP sous Unix
si elle est sous Windows
.
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.
Dans cette partie, il s'agit de mettre en place l'environnement de travail.
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
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.
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.
Dans le fichier TP-calc-SR.php
, ajoutez dans l'en-tête votre NOM
comme titre de l'onglet.
Dans le corps de la page, définissez 4 blocs div
à la suite dont les noms sont entete
, formulaire
, affichage
et data
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.
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.
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.
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.
PHP
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.
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)
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.
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
.
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()
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.
S'il vous reste du temps, vous pouvez traiter les questions suivantes.
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.
Dans le 3ème bloc, affichez le masque en bleu s'il est valide, en rouge s'il ne l'est pas.
Ecrivez vous même votre fonction masque_en_slash($masque)
et utilisez là à la place de celle fournie dans la librairie.