Linux Ping: Mostrar o tempo limite

15

Como posso fazer o ping do Linux mostrar o tempo de espera das solicitações em vez de omitir a saída?

Assim como a versão do Windows do ping.

    
por Andre 12.04.2011 / 22:33

11 respostas

12

fping não funcionou para mim ... No meu caso, na maioria das vezes eu quero ver isso é basicamente durante a reinicialização do servidor ... isso funciona muito bem no Windows ...

Eu construo um script simples (expandindo @entropo answer) para me ajudar nisso, o que pode ajudar a responder a essa pergunta:

link

#!/bin/bash

host=$1

if [ -z $host ]; then
    echo "Usage: 'basename $0' [HOST]"
    exit 1
fi

while :; do
    result='ping -W 1 -c 1 $host | grep 'bytes from ''
    if [ $? -gt 0 ]; then
        echo -e "'date +'%Y/%m/%d %H:%M:%S'' - host $host is 3[0;31mdown3[0m"
    else
         echo -e "'date +'%Y/%m/%d %H:%M:%S'' - host $host is 3[0;32mok3[0m -'echo $result | cut -d ':' -f 2'"
        sleep 1 # avoid ping rain
    fi
done

E o uso é algo como:

    
por 01.11.2013 / 01:11
16

A melhor coisa que eu encontrei foi usar o sinalizador -O (Note que ele não funciona em todas as distribuições - usando o Linux Mint 17.1 Rebecca IPUTILS-PING 3: 20121221-4ubuntu1.1)

$ ping -O 10.10.5.1

64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms

Da página do manual:

-O Report outstanding ICMP ECHO reply before sending next packet. This is useful together with the timestamp -D to log output to a diagnostic file and search for missing answers.

    
por 06.07.2015 / 15:39
5

Quando eu uso ping para ver se um host está em shell scripts, eu faço algo assim:

ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up

Basicamente, envia um ICMP que expira em um segundo sem saída e usa o código de saída para encaminhar ações adicionais.

    
por 12.04.2011 / 23:52
2

Não há como o ping comum fazer isso. Se você está tentando escrever algo, você tem algumas opções:

ping -c 2 <ip>
RESULT=$?
echo $RESULT
1

Se o ping falhar, $? será 1, se o ping for bem-sucedido, $? será 0.

A outra opção é usar fping , que funciona muito parecido com o Cisco ping :

$ fping 200.1.1.1
200.1.1.1 is unreachable
$ fping 192.168.1.1
192.168.1.1 is alive
    
por 12.04.2011 / 22:55
2

O script acima de bruno.braga funciona muito bem, mas pessoalmente eu prefiro usar um alias em um perfil de shell (como .bashrc) para que possa ser um caso de uso diário.

Minha solução abaixo também calcula o número de seqüência do ECHO Request automaticamente:

alias pingt='__pingt() { s=0; while :; do s=$(($s+1)); result=$(ping $1 -c1 -W1 |/bin/grep from) && echo "$result, seq=$s" && sleep 1 || echo timeout; done }; __pingt $1'

Aqui está o exemplo de saída quando o host está instável com um tempo limite:

$ pingt 10.10.10.126
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.235 ms, seq=1
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.228 ms, seq=2
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.209 ms, seq=3
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.241 ms, seq=4
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.195 ms, seq=5
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.211 ms, seq=6
timeout
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.267 ms, seq=8
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.232 ms, seq=9
^C

É claro que a desvantagem é: nenhuma estatística no final quando o CTRL-C é pressionado. Se desejar, também seria possível calcular min / avg / max pelo shell script, o mdev está muito além do escopo.

    
por 26.09.2016 / 06:00
1

Eu tenho medo, mas não há solução 100% para isso com o ping padrão. Mesmo com ping -v para o ping de saída detalhado seria silencioso em caso de tempos limite. Você poderia tentar usar:

ping -w 2 192.168.199.1
PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.

--- 192.168.199.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1007ms

Isso interromperia o ping após 2 segundos e mostraria o número de pacotes transmitidos e a perda de pacotes. Outra opção seria usar mtr .

    
por 12.04.2011 / 22:47
1
nomad@local:~$ fping -l -e 8.8.8.8

8.8.8.8 : [0], 92 bytes, 183 ms (183 avg, 0% loss)
8.8.8.8 : [1], 92 bytes, 61.4 ms (122 avg, 0% loss)
8.8.8.8 : [2], 92 bytes, 164 ms (136 avg, 0% loss)
8.8.8.8 : [3], 92 bytes, 163 ms (143 avg, 0% loss)
8.8.8.8 : [5], 92 bytes, 158 ms (146 avg, 16% loss)
8.8.8.8 : [6], 92 bytes, 122 ms (142 avg, 14% loss)
8.8.8.8 : [7], 92 bytes, 134 ms (141 avg, 12% loss)
8.8.8.8 : [8], 92 bytes, 130 ms (140 avg, 11% loss)
nomad@local:~$ fping -version
fping: Version 3.2
fping: comments to [email protected]
    
por 29.03.2013 / 16:46
0

Eu realmente gosto do script de shell de Bruno. Eu adicionei uma linha para criar um arquivo com todas as falhas.

echo -e " date +'%Y/%m/%d %H:%M:%S' - host $ host é \ 033 [0; 31mdown \ 033 [0m" > > ./lostpackets.txt

    
por 29.09.2014 / 04:33
0

Sem escrever nada

ping -f -i 1 hostname

Vantagens : comando padrão do Linux - nada para instalar ou script.

Desvantagens :

  1. NADA é impresso para pacotes que foram respondidos com sucesso
  2. Faz um beep irritante para os pacotes que são respondidos com sucesso
  3. A indicação visual de tempos limite é a mínima possível (um pequeno ponto permanece na tela quando um pacote expira).

Com um script mínimo

#!/bin/bash
while :; do
    ping -W1 -c 1 "$@" | grep 'bytes from '
    case $? in
        0 ) sleep 1 ;;
        1 ) echo -e "request timeout" ;;
        * ) exit ;;
    esac
done

Desvantagens : Você não obtém estatísticas no final e não pode usar essas 3 opções de ping:

  1. -i para alterar o intervalo entre o envio de pacotes (é codificado para 1 segundo)
  2. -W para alterar o tempo limite (é codificado para 1 segundo)
  3. -c para parar depois de enviar N pacotes

BTW: Este é um dos exemplos extremamente raros de funcionalidade que realmente sinto falta de uma ferramenta Linux CLI, mas eu acho em uma ferramenta do Windows. A execption que prova a regra como eles dizem: -)

    
por 17.01.2015 / 19:48
0

Se você deseja executar ping contínuo como janelas e timestamp, use este. Sinta-se à vontade para substituir 192.168.0.1 pelo seu próprio endereço IP

while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "'date' >>> Reply OK" && sleep 1 || echo "'date' >>> Request timed out"; done

Exemplo de resposta OK

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "'date' >>> Reply OK" && sleep 1 || echo "'date' >>> Request timed out"; done
Wed Jan  3 03:41:49 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:50 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:51 GMT 2018 >>> Reply OK
^Z
[23]+  Stopped                 sleep 1
[user@Linux ~]$

Solicitação de exemplo expirou

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.254 > /dev/null && echo "'date' >>> Reply OK" && sleep 1 || echo "'date' >>> Request timed out"; done
Wed Jan  3 03:41:36 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:37 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:38 GMT 2018 >>> Request timed out
^Z
[22]+  Stopped                 ping -c 1 -t 1 192.168.0.254 >/dev/null
[user@Linux ~]$ 
    
por 03.01.2018 / 04:32
0

O Ping normal realmente mostra os tempos limite. Observando o valor seq = entre pings, você pode informar quantos tempos limite

64 bytes from 192.168.12.46: icmp_seq=8 ttl=62 time=46.7 ms
64 bytes from 192.168.12.46: icmp_seq=11 ttl=62 time=45.3 ms

Ocorreu um intervalo de EG 3 entre os 2 pings acima, pois o primeiro foi seq=8 e o segundo foi seq=11 (9 e 10 foram tempos limite) seq=sequence .

    
por 23.01.2018 / 09:15