Здесь телефон Android отправил аналогичный идентификатор поставщика:
Option: (t=60,l=52) Vendor class identifier = "dhcpcd-5.2.10:Linux-3.0.16-ge733189:armv7l:shooter_u"
Однако устройство iPhone не отправило ничего, кроме своего MAC-адреса и имени хоста. То же самое и с устройством Nokia Symbian (E71). Мой образец из трех устройств показывает, что только устройства Android отправляют что-нибудь полезное. У вас может быть некоторый успех, если вы узнаете, какую информацию запрашивает каждый клиент (SIP-сервер, поиск домена) и действительно запрашивает , а не , и используя это как «отпечаток пальца».
Однако, на мой взгляд, реальный ответ - поместить «неизвестных» клиентов в сеть по умолчанию, а явно известные устройства в другую.
Вы можете ограничить доступ к сети на вашем DHCP-сервере. Например, в ISC DHCP вы можете определить класс или несколько подклассов, используя строку, которую отправляет android:
class "Android" {
match if substring(option vendor-class-identifier,0,5) = "dhcpd";
}
Вы можете зарегистрировать эту информацию для отладки в ваших файлах журналов, добавляя в ваш файл cfg:
log (debug, substring (option vendor-class-identifier, 0, 5));
Использование имени хоста для сопоставления. Пользователи могут изменить его на Android, выбрав «Настройки»> «Параметры разработчика»> «Имя хоста устройства». Но я почти уверен, что 90% пользователей оставляют эту настройку в покое. iPhone и iPad
class "Android" {
match if substring(option host-name,0,7) = "Android";
}
class "iPhone" {
match if substring(option host-name,0,6) = "iPhone";
}
class "iPad" {
match if substring(option host-name,0,4) = "iPad";
}
class "Windows-Phone" {
match if substring(option host-name,0,13) = "Windows-Phone";
}
class "BLACKBERRY" {
match if substring(option host-name,0,10) = "BLACKBERRY";
}