Есть несколько способов сделать это, и обычно маршрутизатор использует комбинацию от 1 до 3 из более простых вариантов. Маршрутизатор / точка доступа обычно не имеет мощности процессора, чтобы сделать что-то исчерпывающее. Просто слишком много работы.
Во всяком случае: это не гарантировано работать. Некоторые устройства не показывают много информации, это может быть неоднозначным, а некоторые устройства могут фактически лгать о том, что это за устройство.
Типичные методы:
- Для устройств Apple и многих телефонов / планшетов вы можете узнать по идентификатору вендора в mac-адресе. Маршрутизатор просто имеет карту-таблицу, которая сопоставляет известные идентификаторы вендоров с соответствующей ОС.
- Многие устройства отвечают известным образом на запрос Bonjour, PNRP, UPNP или NetBios. Просто отправьте несколько таких проб и проанализируйте полученные ответы. Из этого часто можно определить, является ли это Windows (и какая версия), OSX, Linux, принтером (и какой моделью), мультимедийным устройством, телевизором и т.д.
- Устройства, поддерживающие SNMP, часто сообщают о своей ОС, модели, версии и т.д. В ответ на запрос SNMP. Требуется очень мало усилий, чтобы запросить эту информацию с устройства.
- В ряде случаев способ, которым устройство выдает запрос DHCP к маршрутизатору, раскрывает информацию об ОС.
Вы упомянули "Пользовательский агент". Я предполагаю, что вы имеете в виду строку user-agent браузера. Это очень маловероятно, так как это потребует больших усилий для реализации (маршрутизатор должен отслеживать весь HTTP-трафик на наличие строк пользовательского агента, что требует больших усилий) и полезно только для клиентов, которые a) имеют веб-браузер и b) где пользователь не изменил строку агента во что-то необычное и в) где пользователь использует стандартный браузер, а не что-то непонятное, и d) где пользователь не использует просмотр в "приватном режиме" (который обычно не показывает обычная строка user-agent).
Много усилий для очень мало надежной информации.