Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Ports et requête web, étape par étape

Après cette leçon: Je peux vérifier quels ports une machine écoute et lire une réponse web.

Leçon de 55 min7 commandesLab de passerelle NAT : masquerade et redirection de port avec nftables dans le navigateur

La caisse qui affiche connexion refusée

La caisse d'un magasin affiche un message rouge : connexion refusée. Le lecteur de cartes est allumé et son câble est bon.

Le message dit quelque chose de précis. La caisse a atteint la machine, et rien là-bas n'attendait sur cette porte.

Cette leçon apprend à lire les portes d'une machine, et la réponse d'un serveur web.

À la fin de cette leçon

Remarque

Je peux vérifier quels ports une machine écoute et lire une réponse web.

Mots clés

MotCe que ça veut direExemple
Portun nombre qui désigne une porte d'une machine80
À l'écoutequi attend des connexions sur un port
HTTPle langage des requêtes et des réponses web
Code d'étatun nombre à trois chiffres qui dit comment une requête s'est passée200
En-têteune ligne d'information en plus dans une requête ou une réponse

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un port est une porte de la machine

Une adresse trouve une machine. Un port trouve un programme sur elle. Un serveur web attend sur le port 80, et un autre programme attend sur un autre port.

Un programme qui attend sur un port est à l'écoute. La commande ss -ltn liste tous les ports à l'écoute : l pour listening, t pour TCP et n pour des nombres simples.

Lister ce que la machine LAN écoute

Commande
sudo ip netns exec lan ss -ltn

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister ce que le serveur extérieur écoute

Commande
sudo ip netns exec srv ss -ltn

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Frapper à un port pour voir qui répond

Depuis une autre machine, nc -zv frappe à un port sans rien envoyer. Le z veut dire seulement vérifier, et v dire ce qui s'est passé.

Il affiche l'un de trois résultats, et le tableau ci-dessous dit ce que chacun signifie.

Frapper à un port ouvert

Commande
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 80

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Frapper à un port où personne n'écoute

Commande
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 9999

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : lire un coup à la porte

nc afficheCe que cela veut direOù regarder
succeededUn programme écouteLe programme lui-même
Connection refusedLa machine a répondu et personne n'écoute làLe programme tourne-t-il, et sur quel port
timed outAucune réponse n'est revenueUn pare-feu, ou une route qui échoue

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une réponse web a trois parties

Une requête web est du texte simple. La réponse aussi, en trois parties : une ligne de code d'état, des en-têtes, puis le corps.

Le code d'état dit comment cela s'est passé. Le premier chiffre donne la famille. Un 2 est un succès et un 3 un déplacement. Un 4 est une erreur de celui qui demande, et un 5 une erreur du serveur.

Lire une réponse entière, en-têtes d'abord

Commande
sudo ip netns exec gw curl --noproxy '*' -s -i -m 3 http://10.0.0.2/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

N'afficher que le code d'état

Commande
sudo ip netns exec gw curl --noproxy '*' -s -o /dev/null -w '%{http_code}\n' http://10.0.0.2:8081/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : les familles de code d'état

CodeFamilleEn mots simples
2002xxCela a marché, et voici la page
3013xxCela a déménagé : demandez cette autre adresse
4044xxIl n'y a rien à ce chemin
5035xxLe serveur n'a pas pu le faire à l'instant

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Envoyer une requête à la main

Commande
printf 'GET /hello HTTP/1.0\r\n\r\n' | sudo ip netns exec gw nc -w 2 10.0.0.2 80

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

On croit souvent que le port 80 est le web et qu'aucun autre port ne peut l'être. Un port est un nombre que quelqu'un a choisi, et 80 n'est que le choix habituel pour HTTP. Le serveur extérieur parle HTTP sur le port 8000. Demandez ce qui écoute, puis posez-lui une question.

Pour aller plus loin : trouver le processus

Lancez sudo ip netns exec lan ss -ltnp et lisez la dernière colonne de chaque ligne. Elle nomme le programme qui tient le port.

Quel programme écoute sur le port 80 ? Est-ce le même processus que celui du 8081 ? En quoi cela vous aiderait-il quand un port est déjà pris ?