Comment utiliser le terminal OS X pour envoyer une requête ping à une adresse IP en utilisant la latence comme condition d'arrêt d'une boucle?

1

Ce que j'aimerais faire, c'est envoyer une requête ping à une adresse IP lorsque la latence est supérieure à une valeur spécifique. Je pense qu'un exemple aidera:

Supposons que j'ai le résultat suivant à la "ping *IP here*"commande:

PING *IP here* (*IP here*): 56 data bytes
64 bytes from *IP here*: icmp_seq=0 ttl=53 time=127.238 ms
64 bytes from *IP here*: icmp_seq=1 ttl=53 time=312.762 ms
64 bytes from *IP here*: icmp_seq=2 ttl=53 time=251.475 ms
64 bytes from *IP here*: icmp_seq=3 ttl=53 time=21.174 ms
64 bytes from *IP here*: icmp_seq=4 ttl=53 time=27.953 ms

Je voudrais un moyen d'arrêter le ping lorsque la latence tombe en dessous d'une valeur donnée. Disons 100, donc dans l'exemple ci-dessus, cela s'arrête après le 4ème résultat.

Rafael Duarte
la source
Rafael, si la réponse ci-dessous résout votre problème, pourriez-vous l'accepter?
Jimtut

Réponses:

2

Ce script semble fonctionner:

#!/bin/sh

HOST="verizon.net"
MIN_TIME=80

LOOP="TRUE"    
while [ $LOOP = "TRUE" ]
do
  latency=`ping -c 1 $HOST | head -2 | tail -1 | sed -e 's/.*time=\(.*\) ms/\1/' | sed -e 's/\..*//'`
  echo "Latency: $latency"
  if [ $latency -lt $MIN_TIME ]
  then
    echo "Target latency ($MIN_TIME) achieved!"
    LOOP="FALSE"    
  fi
done

La sortie ressemble à ceci, s'arrêtant quand il passe en dessous de mon seuil (80 ms):

Latency: 83
Latency: 88
Latency: 119
Latency: 77
Target latency (80) achieved!

Ajustez les variables dans le script pour votre usage. Vous devrez peut-être modifier les morceaux de tête / queue / sed pour votre pingsortie. Ceci a été écrit avec Mac OS X 10.9 ping.

jimtut
la source