Update readme

il manque ex2 partie 2
This commit is contained in:
Minh VU
2025-02-24 15:58:57 +01:00
parent 31f2044753
commit a47ae80e69
3 changed files with 70 additions and 115 deletions

158
README.md
View File

@@ -10,8 +10,15 @@ Le 4 février 2025
Nous nous sommes inspirés du cours pour implémenter le serveur écho.
### EXERCICE 2 : Test et capture
![Echo sur client utilisant ClientHandlerBytes](images/p1_ex2_bytes.png)
Après lancé le serveur, on a ouvert un terminal cmd sur windows pour tester:
```
ncat localhost 8080
Hello World!
Hello World!
Je teste, je suis content, je dors
Je teste, je suis content, je dors
^C
```
Quand on voit le contenu du TCP, on voit tout le texte d'échange mais on voit qu'il y a un espace entre chaque 8 caractères quand on passe la taille du buffer. Et à la fin du caractère, nous pouvons voir le dernier caractère pour déterminer la fin du texte.
![Follow> TCP Stream](images/p1_ex2_wireshark.png)
@@ -27,45 +34,69 @@ Dans le texte "Je teste, je suis content, je dors" nous avons 99 octets, dont 64
### EXERCICE 3 : Version Multithreadée
Dans cet exercice, on réussit à créer un multi thread pour 4 personnes seulement, on teste avec le 5ème et il ne peut pas être "echo"
On peut voir dans l'image qu'on a 2 clients demandent l'accès du serveur:
Paquet no.49 et 51 sont client 1 et paquet 324 et 326 sont client 2.
![Multi_threadée_2_clients](images/p1_ex3_2clients.png)
## Partie II: Implémentation dun client HTTPping
### EXERCICE 1 : Analyse du protocole HTTP
```
On vous demande de produire une capture de lintéraction entre votre navigateur et le site http://example.com.
Vous devrez utiliser “Follow TCP Stream”
En vous aidant de la spécification ou de Wikipedia.
Coté requête :
Quel est le rôle de la première ligne ? ( GET / HTTP/1.1 ):
Càd on a demandé les resources sur la racine de example.com avec la version HTTP 1.1
Décrivez le rôle des options : “Accept-Encoding:”, “Accept:” et “Connection: keep-alive” ?
Accept-Encoding
Coté serveur :
Décrire la première ligne. A quoi sert le code de réponse ?
Trouvez un site dont la réponse est 404 ou 403.
En vous aidant de la spec décrivez les grandes étapes du protocole pour la récupération dune page ?
Par la suite nous vous suggérons dutiliser loption “Connection: Close” dans les réponses.
1. Ex: La première ligne `GET / HTTP/1.1` est la ligne de requête avec structure:
```
Méthode Lien Version_de_HTTP
```
2. Rôle des options:
- Accept-Encoding: L'encodage que le client peut comprendre
- Accept: Type de conetnu que le client peut accepter
- Connection: keep-alive: C'est une intruction qui permets de rester ouvert pour multiples requêtes/ réponses HTTP
Cote serveur:
1. La première ligne est la ligne de status avec structure:
```
Version_de_HTTP Code_de_status Message
```
2. On ne peut pas trouver un siteweb qui retourne 404. On a testé avec nombreux de sitewebs et reçu 400 Bad Request.
Donc on a utiliser localhost de 3ème partie qui lance test.html et change à abc.html pour créer erreur 404
```
ncat localhost 8080
GET /a.html HTTP/1.1
HTTP/1.1 404 File Not Found
Content-Type: text/html
Connection: close
```
3. Les étapes du protocole pour la récupération dune page:
- Le client demande la connexion
- Le client envoie les requêtes
- Serveur va vérifier et connecter
- Serveur verra s'il existe le web page
- Serveur renvoie le résultat et son contenu si c'est possible
- Fermeture la connexion
### Exercice 2 : Récupération dune page avec netcat
```
Pensez à faire un retour à la ligne.
example.com supporte-t-il le protocole HTTP/1.0 ?
example.com supporte-t-il le protocole HTTP/1.0
quel est lencodage utilisé pour le type de retour ?
que se passe-t-il si vous ajoutez “Accept-Encoding : gzip” ?
```
### Exercice 3, Implémentation du HTTP ping
### Exercice 4 : Socket securisée
![Teste HTTPS avec ncat](images/p2_ex4_https.png)
On test avec google.fr et on a reçu ce résultat:
```
ncat --ssl google.fr 443
GET / HTTP/1.0
HTTP/1.0 200 OK
Date: Tue, 04 Feb 2025 22:57:57 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
```
Ensuite, nous devons changer `GET / HTTP/1.1` en `GET / HTTP/1.0` pour détecter https, son port et créer SSLSocketFactory pour détecter le http sécurisé.
On lance wireshark et obtient le message crypté. Malheureusement, je ne peux pas mettre le fichier pcapng car j'utilise l'adresse IP chez moi.
@@ -78,78 +109,5 @@ Vérification de message encrypté:
![Message encrypté](images/p2_ex4_ecrypted.png)
## Partie III : Implémentation dun serveur HTTP simple
## Utilisation
Pour utiliser ce tp vous devez :
1. le forker via le lien fork ci-dessus.
2. Votre repository doit être **privé**. Vous devez le partager avec votre encadrant de TP.
3. vous obtiendrez un nouveau lien : par exemple git@gitlab.istic.univ-rennes1.fr:monpseudo/tp1.http.git
4. Dans le **workspace d'eclipse** faites `git clone git@gitlab.istic.univ-rennes1.fr:monpseudo/tp1.http.git` avec l'url précédente.
5. Ouvrez le workspace dans eclipse.
6. Utilisez Import> "Existing Maven Projects".
7. Selectionnez le projet et validez.
Vous devriez avoir une version du projet dans votre propre compte gitlab.
Vous pouvez le partager avec votre binome et l'encadrant de TP.
## Rapport
J'ai fait ça avec Tuan Minh Vu.
Votre rapport doit être écrit ici en markdown.
Vous trouverez la syntaxe de markdown ici : https://docs.gitlab.com/ee/user/markdown.html
Placez vos images dans le répertoire images si nécessaire.
## Faire des diagrammes
En particulier vous pouvez utiliser [mermaid](https://mermaidjs.github.io/) :
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->John: Hello John, how are you?
loop Healthcheck
John->John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail...
John-->Alice: Great!
John->Bob: How about you?
Bob-->John: Jolly good!
```
## Insérer du code
Insérer du `code` :
```java
public interface ClientHandler {
public void handle();
}
```
et des résultats :
```bash
[yo@capybara dkgr]$ nc google.fr 80
PWET /
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Content-Length: 1555
Date: Mon, 21 Jan 2019 12:18:02 GMT
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
```
Dans cette dernière partie, on a codé un serveur auquel on peut accéder depuis ncat et notre navigateur. On utilise PrintWriter pour envoyer les données au client.
Et on vérifie également auprès de Wireshark pour assurer que cela a fonctionné correctement.