是否可以根据 DHCP 请求检测 Android 和 iOS 设备?

是否可以根据 DHCP 请求检测 Android 和 iOS 设备?

我想配置 DHCP 服务器,使其将“普通”智能手机和平板电脑放入单独的子网。是否可以根据 DHCP 请求本身检测 DHCP 请求是来自 Android 还是 iOS 设备?

例如:一部索尼安卓手机在请求中设置了以下 DHCP 选项,这些选项可能有助于识别

bootp.option.vendor_class_id == "dhcpcd-5.2.10:Linux-2.6.32.9-perf:armv7l:mogami"
bootp.option.hostname == "android-c7d342d011ea6419"

智能手机 DHCP 请求中是否存在比 MAC 前缀更好的已知常见模式?

答案1

此处的 Android 手机发送了类似的供应商 ID:

Option: (t=60,l=52) Vendor class identifier = "dhcpcd-5.2.10:Linux-3.0.16-ge733189:armv7l:shooter_u"

但是 iPhone 设备除了 MAC 地址和主机名之外什么也没有发送。诺基亚 Symbian 设备 (E71) 也是如此。我对三台设备的样本表明只有 Android 设备发送了有用的信息。通过查找每个客户端请求的信息(SIP 服务器、域搜索),您可能会有所收获,而且确实如此。不是请求,并将其用作“指纹”。

然而,在我看来,真正的答案是将“未知”客户端放在默认网络中,将明确已知的设备放在不同的网络中。

答案2

使用主机名进行匹配。用户可以在 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";
}

答案3

您可以在 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));

相关内容