Bash fournit des pseudo-appareils que vous connaissez probablement comme /dev/null
. Cependant, il existe d'autres périphériques tels que /dev/tcp
et /dev/udp
pour tester les connexions réseau, que vous pouvez également utiliser dans les scripts Bash.
extrait de la page de manuel de Bash
Bash gère plusieurs noms de fichiers spécialement lorsqu'ils sont utilisés dans des redirections, comme décrit dans le tableau suivant:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a UDP connection to the corresponding socket.
Exemple
Ici, je teste la connexion à un hôte de mon domaine nommé skinner et je vois si je peux me connecter à son port 22.
REMARQUE: le port 22 est pour SSH, pour le port 23 d'utilisation telnet.
$ echo > /dev/tcp/skinner/22 && echo "it's up" || echo "it's down"
it's up
Super alors essayons un non-port:
$ echo > /dev/tcp/skinner/223 && echo "it's up" || echo "it's down"
bash: connect: Connection refused
bash: /dev/tcp/skinner/223: Connection refused
it's down
Eh bien, cela fonctionne, mais c'est une sortie terriblement moche. Ne pas s'inquiéter. Vous pouvez exécuter le echo > /dev/tcp/...
sous-shell et rediriger toutes les sorties vers /dev/null
pour le nettoyer un peu. Voici le modèle que vous pouvez utiliser dans vos scripts shell:
$ (echo > /dev/tcp/skinner/22) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's up
$ (echo > /dev/tcp/skinner/223) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's down