Existem várias maneiras de fazer isso e geralmente o roteador usa uma combinação de 1 a 3 das variantes mais simples. O roteador / AP geralmente não tem a potência da CPU para fazer algo exaustivo aqui. Apenas muito trabalho.
De qualquer forma: não é garantido que funcione. Alguns dispositivos não revelam muita informação, podem ser ambíguos e alguns dispositivos podem realmente mentir sobre o tipo de dispositivo que eles são.
Os métodos típicos são:
- Para dispositivos da Apple e muitos telefones / tablets, você pode identificar a partir do ID do fornecedor no endereço MAC. O roteador simplesmente tem uma tabela de mapas que corresponde aos identificadores de fornecedores conhecidos para o sistema operacional correspondente.
- Muitos dispositivos respondem de maneira conhecida a uma solicitação do Bonjour, PNRP, UPNP ou NetBios. Basta enviar algumas dessas sondas e analisar as respostas resultantes. A partir disso, você pode determinar se é o Windows (e qual versão), OSX, Linux, uma impressora (e qual modelo), dispositivo multimídia, TV, etc.
- Os dispositivos que suportam SNMP geralmente informam seu sistema operacional, modelo, versão etc., em resposta a uma consulta SNMP. É preciso muito pouco esforço para solicitar essas informações do dispositivo.
- Em vários casos, a maneira como um dispositivo envia uma solicitação DHCP ao roteador revela informações sobre o sistema operacional.
Você mencionou "Agente do usuário". Eu presumo que você quer dizer string user-agent do navegador com isso. Isso é muito improvável, pois isso exigiria muito esforço para implementar (o roteador deve monitorar todo o tráfego HTTP para presença de sequências de agente do usuário, o que exige muito esforço) e é útil apenas para clientes que: a) tenham um navegador da Web eb ) onde o usuário não modificou a cadeia de caracteres do agente em algo incomum e c) onde o usuário usa um navegador padrão e não algo obscuro e d) onde o usuário não está usando a navegação "modo privado" (que geralmente não revela a cadeia de agente do usuário normal).
Muito esforço para muito pouca informação confiável.