Ce guide explique différentes manières de trouver quel service écoute sur un port particulier sous Linux. La plupart d'entre vous connaissent le port par défaut des services ou processus populaires. Par exemple, le port par défaut d'Apache est 80, le port FTP par défaut est 21 et le port SSH par défaut est 22. Vous pouvez trouver les noms et numéros de port sous Linux comme décrit dans ce guide . Les numéros de port par défaut peuvent également être remplacés par n'importe quel port personnalisé pour sécuriser un serveur Linux. Par exemple, les guides suivants décrivent comment modifier le port par défaut d'Apache, FTP et SSH sur un port différent.
- Comment changer le port par défaut d'Apache en un port personnalisé
- Comment changer le port FTP par défaut en un port personnalisé
- Comment changer le port SSH par défaut en un port personnalisé
Si le numéro de port par défaut est modifié, comment trouveriez-vous quel service écoute sur quel port ? C'est ce que nous allons découvrir maintenant !
Trouver quel service écoute sur un port particulier sous Linux
J'ai énuméré quatre méthodes ci-dessous pour vérifier quel service s'exécute dans un numéro de port particulier. Je continuerai à mettre à jour cette liste si je rencontre de nouvelles méthodes à l'avenir. Alors, ajoutez-le à vos favoris et vérifiez-le de temps en temps.
Méthode 1 - Utilisation de netstat
C'est le moyen le plus couramment utilisé pour trouver quel service écoute sur quel port. Netstat est un utilitaire de ligne de commande utilisé pour imprimer les connexions réseau, les tables de routage, les statistiques d'interface, les connexions masquées et les adhésions multidiffusion.
Netstat est disponible dans les dépôts par défaut de la plupart des distributions Linux.
Pour l'installer sur Arch Linux et ses variantes, faites :
$ sudo pacman -S net-tools
Sur CentOS, RHEL :
$ sudo yum install net-tools
Sur Fedora :
$ sudo dnf install net-tools
Sur Debian, Ubuntu :
$ sudo apt install net-tools
Une fois installé, exécutez la commande suivante pour trouver quels services écoutent sur quels ports :
$ sudo netstat -tulpn
Exemple de résultat :
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2068/python3 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1072/mysqld tcp6 0 0 :::22 :::* LISTEN 1026/sshd tcp6 0 0 :::80 :::* LISTEN 1062/apache2 udp 0 0 127.0.0.53:53 0.0.0.0:* 665/systemd-resolve udp 0 0 192.168.225.22:68 0.0.0.0:* 647/systemd-network udp 0 0 192.168.225.53:68 0.0.0.0:* 647/systemd-network udp6 0 0 fe80::a00:27ff:feff:546 :::* 647/systemd-network udp6 0 0 fe80::a00:27ff:fe7e:546 :::* 647/systemd-network
Comme vous pouvez le voir, un service python (simpleHTTPserver dans ce cas) écoute sur le port numéro 8000, le service mysqld écoute sur le port 3306, le service ssh s'exécute sur le port numéro 22, apache2 s'exécute sur le port 80 et ainsi de suite.
Ici,
-t
l'indicateur affiche les connexions tcp.-u
le drapeau montre les connexions udp.-l
flag affiche les sockets d'écoute.-p
flag affiche l'ID de processus (PID) et le nom de processus de tout ce qui utilise ce port.-n
flag affiche les adresses numériques.
La commande ci-dessus répertorie tous les services et les numéros de port sur lesquels ils écoutent. Et si vous voulez trouver quel service écoute sur un port particulier ? Voici où commande grep est très pratique! Nous pouvons combiner netstat
et grep
commande pour filtrer la sortie pour un service spécifique, par exemple mysqld , comme ci-dessous.
$ sudo netstat -tulpn | grep mysqld [sudo] password for sk: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Voir? Le service mysqld écoute sur le port numéro 3306.
Si vous connaissez déjà le numéro de port, mais que vous ne savez pas quel service l'utilise actuellement, remplacez simplement le nom du service par le numéro de port, comme indiqué ci-dessous.
$ sudo netstat -tulpn | grep -w 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Ici, -w
flag affiche uniquement les lignes contenant des correspondances qui forment des mots entiers. En d'autres termes, -w
L'option affiche la correspondance exacte de la chaîne donnée.
Vous pouvez également utiliser -i
pour ignorer les distinctions de casse, de sorte que les caractères qui ne diffèrent que par la casse correspondent les uns aux autres
$ sudo netstat -tulpn | grep -i 3306
C'est aussi simple que cela.
Pour plus de détails, consultez les pages de manuel.
$ man netstat
Netstat est pour la plupart obsolète. L'alternative à netstat est "ss".
Méthode 2 - Utilisation de la commande "ss"
ss est un utilitaire de ligne de commande pour étudier les sockets. C'est une alternative à netstat et l'utilisation de "ss" est presque la même que "netstat". Il est préinstallé sur Ubuntu et ses variantes.
Pour trouver quels services écoutent sur quels ports, exécutez :
$ sudo ss -tulpn
Exemple de résultat :
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=12)) udp UNCONN 0 0 192.168.225.22%enp0s3:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=17)) udp UNCONN 0 0 192.168.225.53%enp0s8:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=25)) udp UNCONN 0 0 [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546 [::]:* users:(("systemd-network",pid=653,fd=24)) udp UNCONN 0 0 [fe80::a00:27ff:feff:d2e0]%enp0s3:546 [::]:* users:(("systemd-network",pid=653,fd=22)) tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32)) tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=13)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1015,fd=3)) tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1015,fd=4))
Pour filtrer la sortie d'un service particulier (par exemple, mysqld), utilisez :
$ sudo ss -tulpn | grep -w mysqld tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))
Pour plus de détails, consultez les pages de manuel.
$ man ss
Méthode 3 - Utilisation de lsof
Comme son nom l'indique, lsof est un utilitaire en ligne de commande pour lister tous les fichiers ouverts appartenant à tous les processus actifs.
Pour l'installer sur Linux, utilisez les commandes suivantes en fonction du type de distribution que vous utilisez.
Sur Arch Linux :
$ sudo pacman -S lsof
Sur Debian, Ubuntu :
$ sudo apt install lsof
Sur CentOS, RHEL :
$ sudo yum install lsof
Sur Fedora :
$ sudo dnf install lsof
Pour trouver quels processus s'exécutent sur quels ports, spécifiez simplement le numéro de port comme indiqué dans la commande suivante :
$ sudo lsof -i :80
Exemple de sortie :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 1062 root 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1087 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1088 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1089 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1090 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1094 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN)
Pour plus de détails, consultez les pages de manuel.
$ man lsof
Méthode 4 - Utilisation de la commande fuser
fuseur est encore un autre utilitaire de ligne de commande pour identifier les processus utilisant des fichiers ou des sockets. Il affiche les PID des processus utilisant les fichiers ou systèmes de fichiers spécifiés.
Il est également disponible dans les dépôts par défaut de la plupart des distributions Linux.
Pour l'installer sur Arch Linux, exécutez :
$ sudo pacman -S psmisc
Sur Debian, Ubuntu :
$ sudo apt install psmisc
Sur CentOS, RHEL :
$ sudo yum install psmisc
Sur Fedora :
$ sudo dnf install psmisc
Nous devons d'abord trouver le PID d'un service ou d'un processus en écoute sur un port particulier. Par exemple, je vais trouver le PID d'un processus écoutant sur le port 3306 en utilisant la commande :
$ sudo fuser 3306/tcp
Vous verrez une sortie comme ci-dessous.
3306/tcp: 1076
Ici, 1076 est le PID.
Et puis découvrez le processus réel à l'aide du PID en utilisant la commande :
$ ps -p 1076 -o comm= mysqld
Alternativement, vous pouvez utiliser -v
flag pour afficher tous les détails en une seule commande.
$ sudo fuser -v 3306/tcp USER PID ACCESS COMMAND 3306/tcp: mysql 1076 F.... mysqld
Pour plus de détails, consultez les pages de manuel.
$ man fuser
Vous connaissez maintenant quatre outils différents pour trouver quels processus écoutent sur quels ports. Tous les quatre sont faciles à utiliser et disponibles dans la plupart des distributions Linux. Si vous connaissez d'autres outils, faites-le nous savoir dans la section des commentaires ci-dessous. Je vérifierai et mettrai à jour cette liste en conséquence.