/4if-tp-reseaux

TP Réseaux 4IF

Primary LanguageJava

TP Programmation Réseaux

TP 1 Application de Chat

TCP

1. Lancer le serveur

java -jar lib/chat-tcp-server.jar 4444

2. Lancer un client texte

java -jar lib/chat-tcp-client.jar 127.0.0.1 4444

3. Lancer un client graphique

java -jar lib/chat-tcp-clientgui.jar 127.0.0.1 4444

UDP

Pas de serveur dans la version UDP, donc pas d'historique.

java -jar lib/chat-udp-client.jar 228.5.6.7 5555

Fonctionnalités communes

  • Pseudonymes : vous pouvez choisir votre pseudonyme

  • Quitter/Se déconnecter : au lieu de quitter en tuant le processus, vous pouvez taper /quit, /dc ou /bye pour vous déconnecter.

  • Salles de discussion : les clients dans les mêmes salles de discussion peuvent discuter ensemble sans que les autres utilisateurs ne puissent voir leurs discussions. Pour rejoindre une salle de discussion, tapez /room <nom-de-la-salle>. Pour retourner dans la salle principale, tapez /room.


TP 2 Serveur Web

Lancer le serveur

java -jar lib/http-server.jar 80 test-serveur/
  • Le dossier racine correspond au dossier qui contient tous les fichiers à servir.

  • Le dossier test-serveur/ inclut quelques fichiers de démonstration. Le dossier doc/ est aussi consultable, par exemple, via le serveur.

Accéder aux ressources

PUT

  • Créer un fichier avec le contenu spécifié

  • ou remplacer le contenu

curl -i -X PUT localhost/lorem.txt -d "Lorem ipsum. "

GET

  • récupérer un fichier
curl localhost/lorem.txt
  • voir les headers
curl -i localhost/lorem.txt

POST

-- créer un fichier avec le contenu spécifié -- ou ajouter à la fin du fichier

curl -i -X POST localhost/lorem.txt -d "Bla bla. "

HEAD

  • récupérer les headers, et aussi la longueur du fichier
curl -I localhost/lorem.txt

Note : curl indique un avertissement lorsqu'on souhaite exécuter la méthode HEAD. En effet, cette manière de faire remarque que le body de la réponse n'est pas de la longueur indiquée dans le header de la réponse Content-Length, car le Content-Length dans la réponse se rapport à la taille du fichier qu'on aurait pu obtenir par un GET, et non pas la taille du body de la réponse.

curl -X HEAD localhost/lorem.txt # ne pas faire ça

GET sur fichier illisible (permissions)

chmod 000 racine/du/serveur/inaccessible
curl -i localhost/inaccessible

DELETE

  • Supprimer un fichier
curl -i -X DELETE localhost/lorem.txt

Redirections 301

  • lorsqu'on GET un dossier, le serveur redirige vers index.html, index.htm ou index.php si le fichier existe, sinon erreur 403 car impossible de GET un dossier.
curl -i localhost # pas de redirection
curl -L localhost # en suivant la redirection

Autres méthodes HTTP, non implémentées

  • erreur HTTP Not Implemented
curl -i -X PATCH localhost

Exécution PHP (côté serveur)

  • Au préalable, il faut que l'exécutable php soit disponible sur votre système et que le PATH soit correctement défini.

  • Un GET vient exécuter le fichier PHP du côté du serveur, et renvoit le résultat vers le client

curl localhost/bonjour.php
  • On peut ajouter un header 'TP-Ignore-Executable' pour que le serveur n'exécute pas le fichier PHP, donc pour que le serveur le considère comme n'importe quel autre fichier.
curl -H 'TP-Ignore-Executable: ignore' localhost/bonjour.php
  • Par exemple on peut faire un PUT pour créer le fichier PHP
curl -H 'TP-Ignore-Executable: ignore' -X PUT localhost/dossier/date.php -d '<?php
    setlocale(LC_ALL, "fr_FR");
    $str = strftime("%A %e %B %Y à %H:%M");
    $encoding = mb_detect_encoding($str, "auto", true);
    $converted = iconv($encoding, "UTF-8", $str);
    $converted = str_replace(" ", " ", $converted);
    echo $converted . PHP_EOL;
?>'

Exécution Python côté serveur

  • Au préalable, il faut que l'exécutable python3 soit disponible sur votre système et que le PATH soit correctement défini.
curl localhost/rand.py