Réaliser plusieurs ping en un script

I. Présentation

Le but de ce petit script est d'effectuer en une seule commande un test de l'ensemble des étapes de sortie des paquets vers le net. Ainsi en cas de dysfonctionnement d'une machine sur la route de sortie, nous pourrons déterminer à quel endroit précis ce dysfonctionnement ce situe en un script.

Ce script est utile pour les réseaux importants, en effet, dans un réseau de particulier ou la seule route de sortie est celle vers la passerelle, puis vers le net, il est inutile d'utiliser un tel script.

II. Le script

#!/bin/bash
tab[0]=127.0.0.1
tab[1]=192.168.1.18
tab[2]=192.168.1.1
tab[3]=194.2.0.20
i=1
while (( $i < ${#tab[*]} )); do
ping -c 1 ${tab[$i]} -q
tabR[$i]=${?};
i=$((i+1));
done

clear
i=1
while (( $i < ${#tab[*]} )); do
if [ ${tabR[$i]} -eq 0 ];
then echo " ${tab[$i]} répond correctement au ping. "
else echo " ${tab[$i]} ne répond pas, l'erreur peut venir de cette étape."
fi
i=$((i+1));
done

 

III. Explication du script

Dans un premier temps, nous entrons les différentes étapes vers lesquelles nous désirons "pinguer". Ces IP sont stockées dans un tableau ( nous pouvons aussi y mettre les noms FQDN puisque les variables sont remises textuellement dans la commande ping).

  •  La premiere boucle while est celle qui boucle les ping en faisant tourner l'adresse vers laquelle on ping ( c'est une simple lecture du tableau tab).
  • Dedans nous pinguons une fois ( -c 1) chaque adresse et nous cachons les lignes de ping (-q )
  •  Ensuite nous stockons le resultat du ping dans un deuxième tableau. la variable ${?} est une variable spéciale qui retourne le résultat de la dernière commande passée ( ici le ping ), 0 correspond à un retour positif et 1 à un retour négatif ( cela nous servira par la suite ).
  •  Nous effaçons les résultats des pings pour plus de lisibité lors de l'exécution du script.

La deuxième boucle while est celle qui traite les résultats.

La même lecture de tableau s'effectue avec un test :

  •  si le résultat du ping est à 0, le ping s'est bien déroulé.
  • le résultat du ping n'est pas 0, le ping s'est mal déroulé.

Il est important de noter que cela n'est pas seulement pour une sortie vers le net, il peut aussi s'agir de pinguer l'ensemble des postes d'un réseau, l'ensemble des routeur, etc ....

IV. Mise en situation

Pour illustrer correctement cela, nous allons simuler l'utilisation du script dans un réseau fictif.

Ici, plusieurs étapes vers Internet sont à passer depuis le poste 172.16.0.3. Le script ressemblera alors à cela.

#!/bin/bash
tab[0]=172.16.0.254
tab[1]=172.17.0.254
tab[2]=172.17.0.1
tab[3]=172.17.0.253
tab[4]=209.56.85.4
tab[5]=209.56.85.3
tab[6]=209.56.85.2
tab[7]=209.56.85.5
tab[8]=194.2.0.20
i=1
while (( $i < ${#tab[*]} )); do
ping -c 1 ${tab[$i]} -q
tabR[$i]=${?}; # i=$((i+1));
done
clear
i=1
while (( $i < ${#tab[*]} )); do
if [ ${tabR[$i]} -eq 0 ];
then echo " ${tab[$i]} répond correctement au ping. "
else echo " ${tab[$i]} ne répond pas, l'erreur peut venir de cette étape."
fi
i=$((i+1));
done

 

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d’IT-Connect.fr et d’Information-security.fr.
Auditeur sécurité chez Amossys.

    mickael a publié 478 articles sur IT-Connect.See all posts by mickael

    6 réactions sur “Réaliser plusieurs ping en un script

    • 13/05/2014 à 12:30
      Permalink

      Merci mais j’ai pas bien compris est ce que ces taches sont effectué sur linux ou bien windows et sur quel logiels et avec quel languages et merci encore

      Répondre
    • 19/09/2014 à 12:12
      Permalink

      Bonjour, petit bémol, il faut mettre la variable i à 0 ligne 6 & 14, et non pas à 1 😉

      Répondre
    • 04/05/2016 à 04:25
      Permalink

      Je ne vois pas pourquoi y a le tag batch (windows), ici, c’est du bash (linux) qui n’a aucun rapport…

      Répondre
    • 01/12/2016 à 05:05
      Permalink

      Il serait bien de faire attention entre les script windows et linux…

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *