A maneira mais confiável de verificar o cliente conectado?

2

Eu tenho um sistema operacional Linux embarcado desenvolvido a partir do zero usando o Yocto. Isso fala com um cliente Windows XP / 7. O SO incorporado executa um servidor DHCP e fornece um endereço ao cliente. O problema é que o cliente está "bloqueado" e bloqueia muitas portas e métodos padrão de fazer as coisas. Se o cliente for detectado presente pelo sistema embarcado, meu script de inicialização iniciará o servidor que testa o sistema; Caso contrário, eu kexec para outro sistema operacional. Qual é a melhor maneira de detectar se um cliente conectado via Ethernet está lá na inicialização (no Linux) sem adicionar tempo de inicialização significativo ao sistema?

Aqui estão as coisas que eu tentei e o que não funciona:

  1. Os pacotes ICMP são bloqueados no lado do cliente para que o ping tradicional não funcione
  2. arping funciona (assim como o nmap usando a varredura ARP), mas os clientes Windows tentam ser "inteligentes" e discar para que demore 20-25 segundos para realmente estabelecer a conexão, o que é inaceitável; idealmente, deve detectar algo em 5-10 segundos. Existe alguma coisa que eu possa definir no lado do servidor para acelerar isso? Ele sempre é inicializado nessa partição primeiro, então a solução mais rápida é a melhor solução.
  3. ifplugd, ethtool, netplugd e sondagem / sys / class / net / eth0 / operstate e / sys / class / net / eth0 / carrier não funcionam porque a porta Ethernet no sistema embarcado está conectada a um comutador interno é sempre hardware "ligado" e "conectado" sábio
  4. Uma solução futura provavelmente usará o Bonjour no lado do cliente e o Avahi no servidor para que possamos ter um protocolo sem conexão, mas isso levará tempo para ser implementado e eu preciso de uma solução provisória porque qualquer software que adicionarmos ao lado do cliente muito tempo para obter aprovação.

Novamente, não posso fazer nada no lado do cliente porque essas unidades são configuradas por outra empresa e bloqueadas. Então, o que mais eu posso tentar no servidor para detectar se o cliente está presente?

    
por Jack 12.05.2014 / 21:54

1 resposta

1

Então, você disse que há um interruptor interno. Você consegue acessar o gerenciamento desse switch? I2C (switch incorporado) ou SNMP?

Você afirma que seu sistema operacional incorporado executa um servidor DHCP. Se um cliente fizer uma solicitação DHCP, essa prova não é a de que o cliente está presente e acessível?

Não tenho ideia do que você quer dizer com "inteligente" e "discagem externa". Se a máquina Windows for se comunicar na Ethernet, ela precisará responder ao ARP. Até agora, o arping parece ser a melhor opção.

    
por 13.05.2014 / 10:21