Como usar o terminal do OS X para fazer ping de um IP usando a latência como uma condição de parada para um loop?

1

O que eu gostaria de fazer é pingar um IP enquanto a latência está acima de um valor específico. Eu acho que um exemplo ajudará:

Vamos supor que eu tenha o seguinte resultado para o comando "ping *IP here*" :

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

Gostaria que uma maneira de fazer o ping parasse após a latência cair abaixo de um determinado valor. Digamos 100, então, no exemplo acima, ele pararia após o 4º resultado.

    
por Rafael Duarte 22.10.2014 / 03:03

1 resposta

2

Este script parece funcionar:

#!/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//' | sed -e 's/\..*//''
  echo "Latency: $latency"
  if [ $latency -lt $MIN_TIME ]
  then
    echo "Target latency ($MIN_TIME) achieved!"
    LOOP="FALSE"    
  fi
done

A saída é assim, parando quando fica abaixo do limite (80 ms):

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

Ajuste as variáveis no script para seu uso. Talvez seja necessário ajustar as partes head / tail / sed para sua saída ping . Isso foi escrito usando ping do Mac OS X 10.9.

    
por 23.10.2014 / 06:17