Observer les ports et les connexions
ss -lntp, conflits de ports et adresses d’écoute.
Objectifs
À la fin de cette leçon, vous saurez :
- lister les ports en écoute avec
ss -lntp; - identifier quel processus écoute sur quel port ;
- diagnostiquer un conflit de port.
🔗 Pour vous rafraîchir la mémoire : lecture de fichiers et aide (cat, grep, man) · redirections et pipes
Lister ce qui écoute
ss -lntp
Décodage des options : listen (en écoute), numérique (ne pas résoudre les noms), tcp, processus.
Sortie type :
State Recv-Q Local Address:Port Peer Address:Port Process
LISTEN 0 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=512))
LISTEN 0 127.0.0.1:3000 0.0.0.0:* users:(("node",pid=2041))
Lecture ligne par ligne :
0.0.0.0:22: SSH écoute sur toutes les interfaces — joignable depuis le réseau ;127.0.0.1:3000: Node n'écoute que sur la boucle locale — invisible depuis l'extérieur ;pid: l'identifiant du processus propriétaire (chapitre OS).
Cette distinction 0.0.0.0 vs 127.0.0.1 est la cause n°1 des « mon serveur ne répond pas depuis une autre machine ».
Vérifier qui occupe un port
Avant de lancer un serveur sur le port 3000 :
ss -lntp | grep 3000
Sortie vide = libre. Sinon, le processus occupant s'affiche avec son PID ; on peut alors soit changer de port, soit arrêter l'occupant (kill <pid>).
Voir les connexions actives
ss -tnp
Sans -l, on voit les connexions établies : chaque ligne est un quadruplet local↔distant. Testez pendant qu'un navigateur discute avec un serveur : vous verrez apparaître des ports sources aléatoires côté client — exactement la théorie du chapitre précédent.
Exercice
- Listez les ports en écoute de votre VM. Quels services tournent déjà ?
- Lancez
python3 -m http.server 8000(ou tout serveur simple) et retrouvez-le dansss -lntp. Sur quelle adresse écoute-t-il ? - Tentez d'en lancer un second sur le même port : constatez l'erreur.
- Depuis Windows hôte, pouvez-vous joindre
http://<ip-vm>:8000? Pourquoi ?
Résumé
ss -lntp= cartographie des portes ouvertes de votre machine.- Adresse d'écoute :
127.0.0.1(local) vs0.0.0.0(réseau). - Un port, un processus : le conflit se détecte avant de démarrer.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 2. Le serveur Python écoute par défaut sur 0.0.0.0:8000 : toutes interfaces.
Question 3. Le second affiche une erreur du type OSError: [Errno 98] Address already in use. C'est le noyau qui refuse : une seule socket en écoute par couple adresse/port.
Question 4. Cela dépend de l'exposition réseau de la VM (Docker publie rarement tous les ports par défaut). Si elle est joignable c'est cohérent avec l'écoute 0.0.0.0 + routage/NAT ; sinon, revoyez la leçon NAT/firewall du chapitre réseau : rien à corriger côté serveur, tout se joue dans l'exposition.