Tester un flux réseau avec Bash
Des fois, il arrive qu’on ait pas d’outils installés sur un serveur tels que telnet ou netcat. Voici donc une solution à base d’éléments pré-inclus dans Bash.
Quand on a ni telnet, ni netcat, ni autre, il reste quand même possible de tester un flux réseau directement avec Bash.
$ echo > /dev/tcp/nom ou IP/port
Si l’hote est joignable à partir de ces informations, rien ne s’affichera, et le code de retour sera 0.
$ echo $?
0
En cas d’erreur, un retour semblable à l’exemple ci-dessous apparaitra :
$ echo > /dev/tcp/nom ou IP/port fermé
bash: connect: Connection refused
bash: /dev/tcp/nom ou IP/port fermé: Connection refused
Evidemment, le code de retour sera différent de 0.
$ echo $?
1
Remarque, pour tester en UDP, il faut utiliser /dev/udp/...
.
L’extrait associé de la page de man :
Bash handles several filenames specially when they are used in redirections, as described in the following table:
(… snip …)
/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.
A failure to open or create a file causes the redirection to fail.
En cas d’utilisation dans un script, pour ne pas afficher les erreurs, voir cette réponse sur Super User.