Ping sur un sous-réseau avec bash

Afin de détecter si des adresses IP d’un réseau sont disponibles ou occupés, il peut être utile de faire un ping sur un sous-réseau ou sur une plage d’adresses donnée.

Par exemple sur un réseau local derrière une box d’accès, le principe est d’effectuer un ping sur les adresses ip possibles :

$ ping 192.168.1.2
$ ping 192.168.1.3
...

Faire une boucle simple

ping boucle avec bash for

Avec une boucle bash, on peut utiliser la commande suivante :

$ for ip in `seq 2 254`; do ping -c1 -t1 192.168.0.${ip}; done

Le résultat n’est pas très parlant et l’exécution assez lente à cause des timeouts possibles.

Améliorer la boucle

Pour améliorer la commande, on va filtrer le résultat de la commande ping et se servir du code de retour de la commande pour afficher les IP qui ont répondu.

$ for ip in `seq 2 254`; do (ping -c1 -t1 192.168.1.${ip} > /dev/null 2>&1 && echo 192.168.1.${ip} &); done

ping boucle avec bash for fork

 

 

 

admin