exibe a contagem icmp_seq ausente | comando ping

1

Estou procurando algo que me mostre o pacote ICMP ausente ao executar o comando ping ou que possa exibir falha na saída. Exemplo abaixo

Saída atual em que estamos perdendo a contagem icmp_seq.

64 bytes from 192.168.56.11: icmp_seq=38 ttl=64 time=1.23 ms
64 bytes from 192.168.56.11: icmp_seq=52 ttl=64 time=0.831 ms
64 bytes from 192.168.56.11: icmp_seq=53 ttl=64 time=0.679 ms
64 bytes from 192.168.56.11: icmp_seq=54 ttl=64 time=0.679 ms
64 bytes from 192.168.56.11: icmp_seq=55 ttl=64 time=0.679 ms
64 bytes from 192.168.56.11: icmp_seq=56 ttl=64 time=0.679 ms

Saída desejada que contará o icmp_seq se estiver faltando, em seguida, mostrará o erro

64 bytes from 192.168.56.11: icmp_seq=51 ttl=64 time=1.23 ms
64 bytes from 192.168.56.11: icmp_seq=52 ttl=64 time=0.831 ms
64 bytes from 192.168.56.11: icmp_seq=53 ttl=64 time=0.679 ms
Failed
Failed
Failed 
Failed
64 bytes from 192.168.56.11: icmp_seq=58 ttl=64 time=0.679 ms
64 bytes from 192.168.56.11: icmp_seq=59 ttl=64 time=0.679 ms
Failed
Failed
Failed
    
por Mongrel 09.12.2016 / 06:11

3 respostas

0

Até agora eu consegui escrever o comando abaixo. Eu posso executá-lo em segundo plano & tailf o arquivo que está sendo criado.

[root@connect ~]# touch result.txt; while true; do ping  -c 1 -w 2 192.168.56.11 || echo “'date' ping faild” >> result.txt; sleep 1; done
    
por 15.12.2016 / 04:13
0

O truque que você pode usar é criar um loop para executar o comando ping com a opção -c para enviar apenas 1 pacote:

 while : ; do 
    ping -c1 -w1 192.168.56.11 | sed -n '/^64 bytes/p;/0 received/s/.*/Failed/p'
 done

O -w está especificando o tempo limite em segundo que será acionado em caso de host inacessível.

O comando sed imprime a saída do ping em caso de sucesso e substitui a saída do ping por Failed em caso de falha.

    
por 09.12.2016 / 08:59
0

verifique este código

isso apenas analisa a saída do ping

bash-4.1$ cat ping.awk
#!/usr/bin/awk -f
#
# analyzes ping output on Linux and looks for missed returns
# based on icmp_seq
#
# ping output is expected on stdin
#

BEGIN { num = 0 }
$5 ~ /icmp_seq=/ {
    split($5, res, /=/);
    if (res[2] != num + 1) {
        print "missed between", num, "and", res[2] }
    num = res[2];
}


bash-4.1$ cat ping_result.txt
64 bytes from 192.168.56.11: icmp_seq=38 ttl=64 time=1.23 ms
64 bytes from 192.168.56.11: icmp_seq=52 ttl=64 time=0.831 ms
64 bytes from 192.168.56.11: icmp_seq=53 ttl=64 time=0.679 ms


bash-4.1$ awk -f ping.awk ping_result.txt
missed between 0 and 38
missed between 38 and 52
    
por 09.12.2016 / 07:39