Comportamento do ping com perda parcial de pacotes no Ubuntu

2

Eu estou olhando especificamente sobre as variáveis de retorno de execução de ping no meu servidor Ubuntu, as variáveis que eu estou procurando é: status de erro, saída em stdout, saída em stderr.

Ao fazer ping em um host, os três cenários a seguir podem acontecer:

  1. O host responde em TODOS os pacotes (sem erro)
  2. O host responde em pacotes ZERO (Erro)
  3. O host responde em ALGUNS pacotes (Comportamento não especificado)

Eu li man ping , algumas vezes e não consigo encontrar o que devo esperar nessa situação.

Eu não tenho como testar isso, as únicas máquinas que eu tenho acesso é um servidor virtual Linode rodando o Ubuntu, e meu Macbook rodando o Snow Leopard (provavelmente não com o mesmo programa PING que o meu servidor)

O que devo esperar como variáveis de retorno do terceiro cenário?

    
por Kasper Grubbe 14.08.2011 / 17:53

2 respostas

1

Sem saber que idioma você está usando para escrever seu código, é difícil dar detalhes, mas aqui está um pequeno manual sobre saídas.

erro, stdout, stderr não são variáveis, mas tipos de saída que um binário unix pode retornar.

stdout - Este é o texto padrão que um programa envia para a tela (em muitos casos) ou arquivo (se redirecionado) ou outro programa, ele pode ser capturado usando

program > file

stderr - Este é o texto que é enviado para o fluxo de erro, uma segunda saída que não é representada por nenhum redirecionamento do fluxo stdout. Você pode capturar isso usando

program 2> file

erro - Este é o código retornado do programa após a conclusão. O sucesso geralmente é indicado por um 0. Você pode capturar isso usando

#!/bin/bash
program
echo $?

Você pode descobrir mais sobre fluxos na página da Wikipédia para Standard_Streams . Há uma boa documentação de captura de streams no bash no manual do bash .

    
por 14.08.2011 / 18:15
2

Existem vários utilitários de ping disponíveis no Linux, inclusive no Ubuntu. O padrão (o único no Ubuntu principal) é de iputils ( iputils-ping ). Os possíveis status de retorno (para ping ou o utilitário IPv6 complementar ping6 ), como de iputils 20100418, são:

  • 0 se você passar a opção -V .
  • 255 se ping não puder eliminar privilégios (isso não deve acontecer).
  • 1 se ocorrer um erro ao analisar o nome do assunto com ping6 -N .
  • 0 ou 1 no caso de saída normal:
    • 1 se nenhuma resposta for recebida.
    • 1 se você definir um prazo com a opção -w ou -W e o número de respostas recebidas for menor que o número de solicitações enviadas.
    • 0 de outra forma, ou seja, se houvesse um prazo e todas as respostas esperadas fossem recebidas, ou se não houvesse prazo e pelo menos uma resposta fosse recebida.
  • 2 em todos os outros casos.

Se você precisar fazer distinções mais refinadas, precisará analisar a saída. O utilitário usa stderr para erros fatais e alguns avisos e stdout para vários relatórios de status e mensagens informativas. Essas mensagens são destinadas ao consumo humano, portanto, não espere um tempo fácil analisando-as, espere ter que atualizar seu analisador toda vez que uma versão for lançada ou você quiser trabalhar em uma plataforma diferente e lembre-se de definir LC_MESSAGES=C no caso de ping já ter sido traduzido (atualmente não é). Existem muito poucos casos de uso que requerem a análise da saída - geralmente tudo que você precisa saber é 2 = Falha na pesquisa de DNS, 1 = host não está respondendo, 0 = sucesso.

    
por 16.08.2011 / 01:52