GNU/Linux >> Tutoriels Linux >  >> Linux

Tester efficacement si un port est ouvert sous Linux ?

Une surprise que j'ai découverte récemment est que Bash supporte nativement les connexions tcp en tant que descripteurs de fichiers. Pour utiliser :

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

J'utilise 6 comme descripteur de fichier car 0,1,2 sont stdin, stdout et stderr. 5 est parfois utilisé par Bash pour les processus enfants, donc 3,4,6,7,8 et 9 devraient être sûrs.

Selon le commentaire ci-dessous, pour tester l'écoute sur un serveur local dans un script :

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

Pour déterminer si quelqu'un écoute, essayez de vous connecter par bouclage. Si cela échoue, le port est fermé ou nous ne sommes pas autorisés à y accéder. Fermez ensuite la connexion.

Modifiez-le en fonction de votre cas d'utilisation, par exemple envoyer un e-mail, quitter le script en cas d'échec ou démarrer le service requis.


Il y a une réponse très courte avec une "réponse rapide" ici :Comment tester si le port TCP distant est ouvert à partir du script Shell ?

nc -z <host> <port>; echo $?

Je l'utilise avec 127.0.0.1 comme adresse "distante".

cela renvoie "0" si le port est ouvert et "1" si le port est fermé

ex.

nc -z 127.0.0.1 80; echo $?

-z Spécifie que nc doit simplement rechercher les démons d'écoute, sans leur envoyer de données. C'est une erreur d'utiliser cette option en conjonction avec l'option -l.


Vous pouvez utiliser netstat de cette manière pour des résultats beaucoup plus rapides :

Sous Linux :

netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Sur Mac :

netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Cela affichera une liste des processus écoutant sur le port (445 dans cet exemple) ou n'affichera rien si le port est libre.


Vous pouvez utiliser netcat pour cela.

nc ip port < /dev/null

se connecte au serveur et referme directement la connexion. Si netcat ne parvient pas à se connecter, il renvoie un code de sortie différent de zéro. Le code de sortie est stocké dans la variable $?. Par exemple,

nc ip port < /dev/null; echo $?

renverra 0 si et seulement si netcat a réussi à se connecter au port.


Linux
  1. Telnet à un port pour tester la connectivité réseau

  2. Comment changer le port SSH sous Linux

  3. Comment ouvrir Appimage sous Linux

  4. Linux – Port série Raspberrypi ?

  5. Comment tester la connectivité du port [TCP/UDP] à partir d'un serveur Linux

Comment rechercher et fermer des ports ouverts sous Linux

Comment utiliser Netcat pour analyser les ports ouverts sous Linux

Comment envoyer un ping à un numéro de port sous Linux

Comment ouvrir un PDF dans un terminal Linux

Ouvrir un port sous Linux

Toutes les façons de vérifier si un port est ouvert sous Linux