métodos inteligentes para um dispositivo de Embedded Linux detectar conectividade com a Internet

StackOverflow https://stackoverflow.com/questions/1468038

Pergunta

A nossa equipe está desenvolvendo um dispositivo de Internet Media baseado em Linux 2.6. Atualmente detectar se conectividade com a Internet é estabelecida (através de um cabo Ethernet i / f) de ping www.google.com

Algumas redes que temos testado o dispositivo não suportam ICMP encaminhamento de pacotes para que o nosso código de aplicativo informa erroneamente a Internet como indisponível neste caso.

Alguém sabe de uma abordagem mais refinada para deduzir se conectividade com a Internet está disponível através de / dev / eth0 sem recorrer a ping um serviço bem conhecido?

Foi útil?

Solução

Como o cara que escreveu essa resposta referenciada por ChristopheD, essa não é a abordagem que eu uso aqui. Ela trabalhou para a outra pergunta, porque, nesse caso estávamos verificando a presença de um link direto PPP da máquina atual - neste caso, estiver conectado a uma rede abitrary que pode ou não pode já ter uma rota padrão, independente de sua conectividade com a Internet em geral.

Uma vez que você precisar de conectividade DNS global para a sua aplicação, eu iria verificar para isso - procurar um endereço que você sabe que vai sempre existir - como uma consulta tipo NS para o domínio com.. Use um razoavelmente longo tempo de espera e / ou repetir algumas vezes antes de desistir. Algo parecido com isto:

dig NS +aaonly com.

Ignorar a saída e testar o valor de saída -. 0 indica a pesquisa foi capaz de entrar em contato com os servidores raiz, qualquer outra coisa e não era

Outras dicas

Em última análise, pretende que o dispositivo seja capaz de usar a Internet para alguma função útil. Se houver um servidor bem definido que o dispositivo se conecta normalmente para, então seria útil para enviar uma consulta para isso.

Em entre "nada" e "função útil" há muitas etapas, e você poderia verificar qualquer um desses como alguma medida de "conectividade":

  • cabo Ethernet ligado (ou link PPP estabelecida, ou Wi-Fi, o que está a sua camada de baixo)
  • servidor atribuído DHCP endereço (se aplicável)
  • Gateway padrão está funcionando
  • servidor DNS está respondendo
  • servidor de destino está respondendo (talvez não um ping ICMP, mas um pequeno HTTP consulta ou qualquer outro protocolo que você pode estar usando)

Dependendo de como savvy seu cliente é, ou se você quiser um erro útil / diagnóstico que eles podem reportar ao suporte técnico, que poderia ser útil detectar todos aqueles.

Também pode ser útil ser capaz de fazer um traceroute como uma ferramenta de diagnóstico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top