Pour ce TP, vous devrez rendre un petit rapport au format texte comportant vos remarques ainsi que les réponses aux questions posées.
Vous pouvez faire un minimum de mise en page, mais les document Word, OpenOffice ou pdf ne sont pas autorisés !
L'objectif de ce TP est de se familiariser avec les concepts liés au réseau.
Afin de pouvoir observer le trafic réseau "normal", il est fortement déconseillé d'utiliser votre portable pour ce TP. Certaines questions ne seront pas possibles sans configuration de réseau virtuel, redirection de ports etc.
Lancez, dans un shell, la commande suivante
$ xhost +
Le résultat devrait ressembler à
$ xhost + access control disabled, clients can connect from any host
Chaque machine sur le réseau local de l'université Savoie Mont Blanc possède une adresse IP. Ces adresses sont visibles depuis le reseau de l'université, mais invisibles depuis le réseau Internet. (Sauf lorsqu'on utilise un VPN correctement configuré...)
Pour obtenir l'adresse IP de votre machine, vous pouvez lancer la commande
ifconfig
. Cette commande est habituellement utilisée par l'administrateur
et n'est pas accessible directement aux utilisateurs. Il faut donc la lancer en
donnant son chemin absolu :
$ /sbin/ifconfig
Le résultat donnera la configuration actuelle des interfaces réseaux
disponibles. La carte réseau s'appellera probablement eth0
. Notez l'adresse
IP (champs inet adr
) dans votre rapport et allez la noter au tableau, en face de votre nom et prénom.
Notez également cette adresse IP dans votre rapport...
SSH ("Secure SHell") est un protocole sécurisé qui permet de lancer un shell sur une machine distante. Pour cela, la machine distante doit avoir un serveur ssh (paquet openssh-server
sous Debian / Ubuntu) et la machine locale doit avoir un client ssh (openssh-client
sous Debian / Ubuntu). Sous Windows, PuTTY est un client SSH simple.
Sous Linux, la commande ssh
s'utilise de la manière suivante :
$ ssh USER@ADDRESS
où, bien entendu, USER
et ADDRESS
sont à remplacer par le nom d'utilisateur et l'adresse du serveur.
Note : pour pouvoir utiliser ssh avantageusement, il est important de savoir utiliser le shell !
Connectez vous à la machine d53.lama.univ-smb.fr
avec l'utilisateur info202
(le mot de passe est info202
) et répondez aux questions suivantes
info202
?
LOG
?
Pendant que vous êtes connecté, lancez la commande
$ check
qui enregistrera votre connexion.
Tous les étudiants doivent faire cette étape, même ceux qui travaillent en binôme !
Une connexion SSH est par défaut en mode texte uniquement. Lorsque le serveur le supporte, il est possible de lancer une connexion SSH pour qu'elle transfère les parties graphiques des applications lancées. Ceci est rarement fait car les délais dûs au réseau rendent l'utilisation d'applications graphiques complexes difficile.
Les questions suivantes ne peuvent pas être faites sur la machine
d53.lama.univ-smb.fr
. Déconnectez vous de cette machine et choisissez une
adresse IP au tableau pour les questions suivantes.
Pour se déconnecter, vous pouvez utiliser les commandes exit
ou
logout
, ou bien la combinaison de touches "Control-d".
Le nom de la machine sur laquelle vous êtes connecté apparait dans le prompt du shell. Il doit être égal au nom de votre machine...
Connectez vous par SSH sur la machine choisie avec la commande
$ ssh USER@ADDRESS
où
USER
est votre login habituel,
ADDRESS
est l'adresse IP choisie.
Une fois connecté, vérifiez que votre sessions SSH ne peut pas exécuter de commande graphique en lançant la commande
$ xeyes
Que se passe t'il ?
Déconnectez vous de la machine distante et choisissez une adresse IP au tableau.
Pour se déconnecter, vous pouvez utiliser les commandes exit
ou
logout
, ou bien la combinaison de touches "Control-d".
Le nom de la machine sur laquelle vous êtes connecté apparait dans le prompt du shell. Il doit être égal au nom de votre machine...
Reconnectez vous avec la commande
$ ssh -X USER@ADDRESS
où
USER
est votre login habituel
ADDRESS
est l'adresse IP choisie
-X
permet le transfert des parties graphiques.
xeyes
. Que constatez vous ?
xeyes
s'exécute ?
Faite cette vérification en décrivant la procédure.
Déconnectez vous de la machine distante en utilisant la commande exit
ou
logout
, ou bien la combinaison de touches "Control-d".
Si elle le permet, il est possible de lancer des applications graphiques pour qu'elles s'affichent sur une machine distante.
La variable du shell $DISPLAY
précise sur quel écran doivent s'afficher les applications graphiques. Vous pouvez afficher la valeur de cette variable avec
$ echo $DISPLAY
Par defaut, cette variable vaut :0.0
mais il est possible de spécifier une autre machine avant le :
initial avec ADDRESS:0.0
.
xeyes
pour l'afficher sur l'écran d'une autre machine. Pour ceci, il faut faire
$ DISPLAY=ADDRESS:0.0 xeyes
ADDRESS
par l'adresse IP de la machine connectée a l'écran.
Que se passe t'il ?
Sur quelle machine s'exécute le processus xeyes
?
xeyes
qui apparait avec la commande kill
?
xeyes
?
Il n'est par défaut pas possible de lancer une application graphique sur un écran autre que le sien. C'est la commande
$ xhost +
du début du TP qui autorise l'affichage d'applications graphiques d'un autre utilisateur.
Chaque ordinateur sur Internet doit être identifié par une adresse IP. Par exemple, l'adresse IP (version 4) du serveur qui héberge le site www.lama.univ-smb.fr est 193.48.123.134.
Vérifiez que vous pouvez utiliser l'adresse IP 193.48.123.134 pour aller sur le site du LAMA avec votre navigateur Internet.
Pour simplifier la vie des utilisateurs, les sites Internet utilisent une adresse "textuelle" :
Ces adresses sont traduites en adresses IP en utilisant le protocole DNS (Domain Name System). Ceci est fait automatiquement par le navigateur web, mais il est possible de faire une requête DNS directement avec la commande host
.
Quelle est l'adresse IP du site www.linuxfr.org ?
Vous ne pouvez pas accéder au site www.linuxfr.org en utilisant directement l'adresse IP car le serveur utilise le nom de domaine pour décider quelle page afficher. Cela permet d'avoir plusieurs sites web sur une même adresse IP, avec des noms de domaine différents. (Ceci n'est pas fait par le site du LAMA...)
Comparez les addresses IP de
La commande ping
permet de mesurer le délai de transmission entre la machine locale et une machine distante. Cette commande s'utilise simplement comme suit
$ ping -c 10 ADDRESS
et envoie des paquets spéciaux (une dizaine) vers l'adresse donnée, qui renvoie une réponse. La commande affiche le temps de réponse de chaque paquet, et des statistiques finales (temps de réponse minimum, moyen et maximum).
Attention, sans l'option -c 10
, la commande continue d'envoyer des paquets jusqu'à ce qu'on la stoppe à la main. Pour ceci, il faut utiliser la combinaison "Control-c".
Mesurez le délai de réponse pour atteindre les sites suivants :
Qu'en pensez vous ?
En particulier, où pensez vous que sont hébergés les serveurs de www.univ-smb.fr et de www.polytech.univ-smb.fr ?
Les paquets qui voyagent sur Internet sont routés : le chemin qu'ils empruntent est décidé dynamiquement par des routeurs qui essaient de rapprocher les paquets de leur destination finale.
L'utilitaire traceroute
permet de visualiser le chemin emprunté par un paquet pour arriver à une destination :
$ traceroute ADDRESS
Regardez la route qu'empruntent les paquets pour aller jusqu'aux adresses IP correspondant aux sites suivants :
Précisez, le nombre de routeurs empruntés par les paquets.
L'utilitaire mtr
(qui n'est pas installé par défaut) combine ping
et traceroute
. Si vous voulez l'utiliser, il suffit de l'installer avec
$ sudo apt-get install mtr-tiny
Wireshark est un logiciel qui permet de capturer tout ce qui passe par l'interface réseau (carte Ethernet ou carte WiFi) de votre ordinateur et de l'analyser. Cet outils est intéressant pour les administrateurs d'un réseau, mais aussi pour les pirates qui peuvent ainsi écouter le trafic réseau et chercher des informations utiles.
https://...
, remplacez la par http://...
Lancez le logiciel wireshark. (Si vous le lancez depuis le terminal, n'oubliez pas de mettre un &
à la fin de la ligne pour récupérer votre shell.)
Vous devriez obtenir quelque chose comme
Dans le menu "View",
Vous pouvez maintenant sélectionner l'interface connectée au réseau
(probablemnt eth0
, eth1
ou eth2
si vous êtes connecté par un
cable ethernet) et lancer la capture en cliquant sur le petit "triangle"
vert. Vous obtenez quelque chose comme
La fenêtre Wireshark est divisée en 3 :
Vous pouvez supprimer l'affichage du contenu "brut" en désactivant l'option "Paquet Bytes" du menu "View".
Pour limiter l'affichage aux paquets HTTP concernant votre machine, il faut ajouter un filtre : pour ne garder que les paquets en provenance (ou à destination) de votre adresse qui utilisent le protocole HTTP et qui ne sont pas en UDP, on peut ajouter le filtre ip.addr == ADDRESS and http and not udp
dans la boite correspondante ("Filter"). "ADDRESS
" doit être remplacé par votre adresse IP.
Appliquez ce filtre, et relancez la capture (carré rouge pour arrêter la capture en cours, et "triangle" vert pour en relancer une nouvelle).
Une fois que la capture est lancée, rechargez la page web du sujet.
GET
sont effectuées pour recharger la page complète du sujet, et à quoi correspondent ces requêtes ?
Pendant que la capture précédente fonctionne encore, supprimez le caches des données de votre navigateur (pour Firefox et Chrome, le raccourci clavier est "Control+Shift+Suppr").
Une fois le cache de données vidé, rechargez la page web du sujet.
GET
sont effectuées pour recharger la page complète du sujet ?
Cherchez, dans la liste des paquets HTTP, la requête GET pour l'image wireshark2.jpg
. Vous pouvez accéder à la réponse du serveur en cliquant sur le lien bleu dans le menu "Hypertext Transfer Protocol" du paquet.
Ce petit formulaire est très simple : il permet simplement de choisir une couleur pour le fond de la page.
taille description ..... local ------> serveur 571 GET (favicon) local <------ serveur 1907 OK (favicon)
Le formulaire ajoute une vérification de mot de passe... (Vous pouvez utiliser n'importe quel login, et le mot de passe doit simplement commencer par la même lettre que le login...)
Refaites la question précédente avec ce nouveau formulaire.
Qu'en pensez vous ?
La page suivante est protégée par un mot de passe.
Relancez la capture de paquets et connectez vous avec l'utilisateur baleine
et le mot de passe poum
.
Inspectez les paquets capturés par Wireshark et vérifiez que le mot de passe est envoyé en clair avec la requête GET.
Qu'en pensez vous ?
http://...
, remplacez la par https://...
Le protocol HTTPS ajoute une couche de cryptographie (TLS) au dessus de HTTP. Pour inspecter les paquets correspondants, il faut remplacer le filtre par ip.addr == ADDRESS and ssl
.
http://
de l'url par un https://
pour accéder à une version HTTPS du même formulaire.
ssl
et rechargez le formulaire simple.
Faites un diagramme de communication en précisant la taille des paquets échangés.
Lorsque vous naviguez sur le web, votre navigateur (qui s'exécute sur votre machine) envoie des requêtes à un serveur web. Les deux requêtes principales sont
GET ...
pour récupérer des données sur le serveur (par exemple, le contenu d'une page web)
POST ...
pour envoyer des données (par exemple, le contenu d'un formulaire)
Ces deux requêtes prennent en argument un chemin vers une ressource : le document demandé dans le cas d'un GET
, ou la ressource qui doit gérer les données envoyées dans le cas d'un POST
.
Le serveur web est un processus qui est associé à un port de la machine sur laquelle il s'exécute. Chaque port est associé à un service. Habituellement, les serveurs web utilisent le port 80.
La commande netcat
permet de faire des connections TCP/IP "à la main". Il suffit de spécifier une adresse et un port :
$ netcat ADDRESS PORT
et :
Autrement dit, on peut écrire des requêtes sur l'entrée standard, et recevoir les réponses sur la sortie standard.
Connectez vous sur le port 80 de l'adresse www.perdu.com
avec netcat
et envoyez la requête GET
pour récupérer le document /index.html
.
Une requête GET
tient sur 2 lignes:
GET <document> HTTP/1.1 Host: <adresse>
Notes :
<document>
doit être remplacé par le chemin du document demandé (/index.html
dans notre cas),
<adresse>
doit être remplacé par le le nom de l'hôte du serveur (www.perdu.com
dans notre cas),
La réponse du serveur contient 2 parties :
Quelle est le code de la réponse du serveur ?
Vérifiez que vous obtenez bien le bon contenu en visitant directement le site www.perdu.com/index.html.
Attention, si vous ne rentrez pas la requête suffisamment rapidement, le serveur va vous déconnecter. Pour résoudre ce problème, vous pouvez :
CMD < FICHIER
...
Connectez vous sur le port 80 de l'adresse www.perdu.com
avec netcat
et envoyez la requête pour récupérer le document /index.php
.
Quelle est le code de la réponse du serveur ?
La commande netcat
permet de communiquer sur un port, mais également de créer un petit serveur sur un port choisi.
$ netcat -l -p PORT
va ouvrir le port donné sur la machine locale et écouter ce qui se passe dessus. (Pour des raisons de sécurité, le port doit être supérieur à 1000.)
Choisissez une adresse IP au tableau et mettez vous d'accord avec la personne qui utilise l'ordinateur :
netcat
pour ouvrir un port sur sa machine, et écouter ce qui se passe dessus
netcat
pour se connecter sur la bonne adresse, et le bon port
netcat
permettent de discuter !
Testez et proposer des améliorations possibles à ce système de chat minimaliste.