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

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

Eu tenho um sistema operacional Linux embarcado desenvolvido do zero usando Yocto. Isso se comunica com um cliente Windows XP/7. O sistema operacional 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 como 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á presente na inicialização (no Linux) sem adicionar tempo de inicialização significativo ao sistema?

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

  1. Os pacotes ICMP são bloqueados no lado do cliente, portanto o ping tradicional não funciona
  2. arping funciona (assim como nmap usando varredura ARP), mas os clientes Windows tentam ser "inteligentes" e discar, de modo que leva de 20 a 25 segundos para realmente estabelecer a conexão, o que é inaceitável; idealmente, ele deve detectar algo em 5 a 10 segundos. Existe algo que eu possa configurar no lado do servidor para acelerar isso? Ele sempre inicializa primeiro nesta partição, então a solução mais rápida é a melhor.
  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 switch interno, portanto está sempre Hardware "ativado" e "conectado"
  4. Uma solução futura provavelmente usará Bonjour no lado do cliente e Avahi no servidor para que possamos ter um protocolo sem conexão, mas isso levará tempo para ser implementado e preciso de uma solução provisória porque qualquer software que adicionamos ao lado do cliente leva muito tempo hora de obter aprovação.

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

Responder1

Então, você disse que há uma chave interna. Você consegue acessar o gerenciamento desse switch? Por I2C (switch incorporado) ou SNMP?

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

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

informação relacionada