Lors du dépannage de problèmes de connectivité réseau ou de problèmes spécifiques à une application, l'une des premières choses à vérifier doit être quels ports sont réellement utilisés sur votre système et quelle application écoute sur un port spécifique.
Cet article explique comment utiliser le netstat
, ss
et lsof
commandes pour savoir quels services écoutent sur quels ports. Les instructions s'appliquent à tous les systèmes d'exploitation basés sur Linux et Unix, tels que macOS.
Qu'est-ce que le port d'écoute #
Le port réseau est identifié par son numéro, l'adresse IP associée et le type de protocole de communication, tel que TCP ou UDP.
Le port d'écoute est un port réseau sur lequel une application ou un processus écoute, agissant comme point de terminaison de communication.
Chaque port d'écoute peut être ouvert ou fermé (filtré) à l'aide d'un pare-feu. En termes généraux, un port ouvert est un port réseau qui accepte les paquets entrants provenant d'emplacements distants.
Vous ne pouvez pas avoir deux services écoutant le même port sur la même adresse IP.
Par exemple, si vous exécutez un serveur Web Apache qui écoute sur les ports 80
et 443
et que vous essayez d'installer Nginx, ce dernier ne démarrera pas car les ports HTTP et HTTPS sont déjà utilisés.
Vérifier les ports d'écoute avec netstat
#
netstat
est un outil en ligne de commande qui peut fournir des informations sur les connexions réseau.
Pour répertorier tous les ports TCP ou UDP en cours d'écoute, y compris les services utilisant les ports et l'état du socket, utilisez la commande suivante :
sudo netstat -tunlp
Les options utilisées dans cette commande ont la signification suivante :
-t
- Afficher les ports TCP.-u
- Afficher les ports UDP.-n
- Afficher les adresses numériques au lieu de résoudre les hôtes.-l
- Afficher uniquement les ports d'écoute.-p
- Afficher le PID et le nom du processus de l'auditeur. Ces informations s'affichent uniquement si vous exécutez la commande en tant que root ou sudouser.
La sortie ressemblera à ceci :
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master
tcp6 0 0 :::3306 :::* LISTEN 534/mysqld
tcp6 0 0 :::80 :::* LISTEN 515/apache2
tcp6 0 0 :::22 :::* LISTEN 445/sshd
tcp6 0 0 :::25 :::* LISTEN 929/master
tcp6 0 0 :::33060 :::* LISTEN 534/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
Les colonnes importantes dans notre cas sont :
Proto
- Le protocole utilisé par le socket.Local Address
- L'adresse IP et le numéro de port sur lequel le processus écoute.PID/Program name
- Le PID et le nom du processus.
Si vous voulez filtrer les résultats, utilisez le grep
commande. Par exemple, pour trouver quel processus écoute sur le port TCP 22, vous tapez :
sudo netstat -tnlp | grep :22
La sortie montre que sur cette machine le port 22 est utilisé par le serveur SSH :
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
Si la sortie est vide, cela signifie que rien n'écoute sur le port.
Vous pouvez également filtrer la liste en fonction de critères, par exemple, PID, protocole, état, etc.
netstat
est obsolète et remplacé par ss
et ip
, mais c'est toujours l'une des commandes les plus utilisées pour vérifier les connexions réseau.
Vérifier les ports d'écoute avec ss
#
ss
est le nouveau netstat
. Il manque une partie du netstat
fonctionnalités, mais expose plus d'états TCP et est légèrement plus rapide. Les options de commande sont pour la plupart les mêmes, donc la transition de netstat
à ss
n'est pas difficile.
Pour obtenir une liste de tous les ports d'écoute avec ss
vous taperiez :
sudo ss -tunlp
La sortie est presque la même que celle rapportée par netstat
:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3))
LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=929,fd=13))
LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30))
LISTEN 0 128 *:80 *:* users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4))
LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14))
LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))
Vérifier les ports d'écoute avec lsof
#
lsof
est un puissant utilitaire de ligne de commande qui fournit des informations sur les fichiers ouverts par les processus.
Sous Linux, tout est un fichier. Vous pouvez considérer un socket comme un fichier qui écrit sur le réseau.
Pour obtenir une liste de tous les ports TCP en écoute avec lsof
saisissez :
sudo lsof -nP -iTCP -sTCP:LISTEN
Les options utilisées sont les suivantes :
-n
- Ne convertissez pas les numéros de port en noms de port.-p
- Ne résolvez pas les noms d'hôte, affichez les adresses numériques.-iTCP -sTCP:LISTEN
- Afficher uniquement les fichiers réseau avec l'état TCP ÉCOUTER.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
La plupart des noms de colonnes de sortie sont explicites :
COMMAND
,PID
,USER
- Le nom, le pid et l'utilisateur exécutant le programme associé au port.NAME
- Le numéro de port.
Pour trouver quel processus écoute sur un port particulier, par exemple, le port 3306
vous utiliseriez :
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
La sortie montre que le serveur MySQL utilise le port 3306
:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
Pour plus d'informations, visitez la page de manuel lsof et découvrez toutes les autres options puissantes de cet outil.
Conclusion #
Nous vous avons montré plusieurs commandes que vous pouvez utiliser pour vérifier quels ports sont utilisés sur votre système et comment trouver quel processus écoute sur un port spécifique.
Si vous avez des questions ou des remarques, veuillez laisser un commentaire ci-dessous.