Como mostrar falha no ping?

24

Quando estamos usando o ping do Windows, ele mostra os pings com falha. O Ubuntu tem função semelhante?

O ping com falha é bastante útil ao depurar a rede. Como vocês resolvem isso? Bem, eu só quero uma solução simples, não quero um script longo.

王子 1986
fonte
2
Você pode fornecer uma saída de amostra ou uma captura de tela para complementar a pergunta?
verde
1
Você está procurando ou informações mais detalhadas que 5 packets transmitted, 0 received, 100% packet loss, time 4032ms(informações como essa são impressas quando o ping termina, por si só ou por Ctrl + C)? Você está procurando dados separados sobre cada ping individual?
Eliah Kagan 06/04
1
O Linux é incrível e todos nós aqui o amamos por muitas razões, mas ... ei, às vezes, o Windows acertou e o Linux errado. Sim, mesmo nas ferramentas básicas da CLI. Sim, mesmo em ferramentas básicas de rede CLI! Se não houver uma maneira fácil de exibir uma mensagem na tela quando algo der errado, devemos reconhecê-la como "um recurso que está faltando". Certamente não queremos fingir que é algo tão complexo que não conseguimos descobrir exatamente o que o OP está perguntando (especialmente quando é um recurso ativado por padrão em alguns milhões de caixas à nossa volta).
Ndemou 17/01/15
Eu poderia jurar que esse recurso estava presente no ping do Linux anterior. Também está presente no MacOS (que é construído sobre o unix). Está além de mim por que não deveria estar lá. Eu tenho uma linha que funciona intermitente e, para descobrir o comprimento dos blecautes, preciso peneirar a saída procurando pular, em vez de ter as linhas claramente distintas.
Silvio Levy

Respostas:

26

A resposta certa é: não existe " ping perdido com falha ". (Respostas de falha como "Destino inacessível" são sempre impressas, é diferente de nenhuma resposta.)

O utilitário Ping imprime todas as respostas recebidas, mesmo se mais decidido que esse ping específico foi perdido. É totalmente possível receber respostas fora de ordem.

Mesmo no meu telefone Android, o utilitário stock ping suporta estas 2 opções:
-D imprime um carimbo de data / hora antes de cada mensagem
-O imprime uma mensagem quando a resposta não é recebida a tempo, e é mais ou menos o que foi solicitado .
No entanto, essas opções não parecem ser suportadas em todos os lugares (por exemplo, o Debian Wheezy não as possui, tanto quanto eu sei, enquanto Jessie as possui. busybox pingNão as suporta).

Aqui está um exemplo de saída que eu consegui obter (respostas sem importância de ping ignoradas):

u0_a93@NX505J:/ $ ping -D -O 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1440545014.805478] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=244 time=116 ms
~~~~~~~~~~
[1440545142.995443] 64 bytes from 8.8.8.8: icmp_seq=129 ttl=244 time=110 ms
[1440545144.885601] no answer yet for icmp_seq=130
[1440545145.455485] 64 bytes from 8.8.8.8: icmp_seq=131 ttl=244 time=568 ms
[1440545145.455780] 64 bytes from 8.8.8.8: icmp_seq=130 ttl=244 time=1569 ms
[1440545146.005850] 64 bytes from 8.8.8.8: icmp_seq=132 ttl=244 time=119 ms
~~~~~~~~~~
[1440545254.055962] 64 bytes from 8.8.8.8: icmp_seq=240 ttl=244 time=115 ms
^C
--- 8.8.8.8 ping statistics ---
240 packets transmitted, 240 received, 0% packet loss, time 239250ms
rtt min/avg/max/mdev = 109.062/138.757/1569.620/101.608 ms, pipe 2

Observe como o número 130 é relatado como ausente, depois recebido depois do número 131 e, finalmente, a perda de pacotes é zero.


Nota extra sobre o Windows:

No Windows, o ping parece aguardar uma resposta maior e, em seguida, declara-o ausente e ignora-o se vier mais tarde.

Por padrão, o intervalo é de 1 segundo e o tempo limite é de 4 segundos, portanto:
Na RTT baixa, os pings serão enviados com intervalos de 1 segundo.
Em RTT> 4, os pings serão enviados com intervalos de 4 segundos (ou 5, não tenho certeza) e todos serão relatados como com falha, o mesmo que se o servidor não responder.

EvgEnZh
fonte
1
+1 para -Oopção, está presente e funciona bem no Ubuntu fiel (e Linux Mint 17,2) do pacote iputils-ping versão 3: 20121221-4ubuntu1.1
Xen2050
11

Indo parcialmente à resposta de EvgEnZh, mas com minha própria versão:

ping -O -q 8.8.8.8

Isso faz com que imprima uma mensagem quando uma resposta demora muito ou nunca volta ( -O) e suprime as mensagens para quando elas voltam ( -q). O resultado é que você só obtém saída quando os pacotes desaparecem. Isso pode facilitar a localização de problemas intermitentes, facilitando a busca por uma pilha de mensagens "funcionou" nos poucos lugares em que ocorreu.

Azendale
fonte
Observe que o acionamento -O significa apenas que a latência é maior que o esperado. Isso geralmente indica um problema real, mas nem sempre. O registro que eu publiquei na minha resposta foi adquirido em uma conexão GPRS fraca e, embora em mais de 2 minutos eu tenha recebido apenas uma resposta fora de ordem, houve muitas respostas que chegaram "atrasadas". A conexão de baixa qualidade foi sobrecarregada algumas vezes, relatou vários pings ausentes seguidos e, em seguida, todos chegaram após alguns segundos. A conexão ainda era confiável (talvez GPRS manipulasse retransmissão internamente, não sei), apenas uma dor extrema para usar mesmo para acesso SSH.
EvgEnZh
3

Talvez ping -fseja adequado para você. No manual do ping:

-f

Ping de inundação. Para cada ECHO_REQUEST enviado, um período ''. '' É impresso, enquanto para sempre ECHO_REPLY recebido, um backspace é impresso. Isso fornece uma exibição rápida de quantos pacotes estão sendo descartados. Se o intervalo não for fornecido, ele definirá o intervalo como zero e enviará os pacotes o mais rápido possível, ou cem vezes por segundo, o que for maior. Somente o superusuário pode usar esta opção com intervalo zero.

Por 1 echo_request a cada segundo, pareceria ping -i 1 -f 8.8.8.8

Daniel Yuste Aroca
fonte
Não tenho certeza se é um novo recurso ou não, pude ver os pings com falha.
1986
Qual opção você usou para obter os pings com falha relatados? Que mensagem você está recebendo para um ping com falha?
22813 Daniel Yuste Aroca
Enquanto eu apenas usava ping, a mensagem é assim: $ ping 172.18.1.12 PING 172.18.1.12 (172.18.1.12) 56 (84) bytes de dados. De 172.18.1.224 icmp_seq = 1 host de destino inacessível De 172.18.1.224 icmp_seq = 2 host de destino inacessível De 172.18.1.224 icmp_seq = 3 host de destino inacessível
王子 1986
2
"Host de destino inacessível" não é o mesmo que um tempo limite de ping
ndemou 17/01/15
ping -f não é a resposta, porque não deixa um registro. O que é necessário é um tipo de linha para um ping bem-sucedido e outro diferente para falha, para que se possa dizer imediatamente (em uma situação em que o serviço é intermitente) quantas vezes e quanto tempo os blecautes são.
Silvio Levy
0

Mesmo com a opção -v, o ping não faz isso. Veja esta pergunta . Mas se isso é realmente importante (ou divertido) para você, você pode fazer o download da fonte, modificar o código para incluir uma chamada de impressão adequada. Um bom lugar para isso seria no final do método 'send_probe' (linha 619 em 12.10) ...

Primeiro você obtém a fonte

apt-get source iputils
cd iputils*

Faça edições

gedit ping.c

Compilar e instalar o pacote gerado ...

apt-get install libsysfs-dev
dpkg-buildpackage
Rémi
fonte
Eu gostaria de fazer isso (e vomitar esta resposta 10 vezes), mas deve haver algo faltando. Estou trabalhando com o sudo -s. Depois de editar o ping.c, se eu tentar "fazer", recebo "erro fatal: sys / capacity.h: esse arquivo não existe". Se eu seguir as próximas duas linhas da resposta (apt-get install e dpkg -...), não recebo erros, mas não faço ideia de onde o executável está colocado. O antigo executável (/ bin / ping) ainda está lá - eu sei que é antigo a partir do registro de data e hora e porque não se comporta de maneira diferente.
Silvio Levy
-1

Obrigado por todas as respostas. Parece que o último ping do ubuntu pode mostrar que o ping falhou.

Obrigado novamente.

王子 1986
fonte
1
Não, não (até 2015-janeiro, pelo menos) "Host de Destino Inacessível" não é o mesmo que um tempo limite de ping
ndemou
Por que essa é a resposta aceita? ping -O -q 8.8.8.8é o caminho a percorrer.
theV0ID 8/07