是否有可能基于DHCP请求检测Android和iOS设备?

我想configurationDHCP服务器,将“普通”智能手机和平板电脑放到一个单独的子网中。 是否有可能检测DHCP请求本身是否来自基于DHCP请求的Android或iOS设备?

例如:一个索尼android手机在请求中设置了以下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前缀更好?

这里的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服务器,域search)并且确实没有请求,并将其用作“指纹”来取得成功。

然而,在我看来,真正的答案是将“未知”客户端置于默认networking中,并明确知道不同的设备。

使用主机名来匹配。 用户可以改变它,在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"; } 

您可以限制您的DHCP服务器的networking访问。 例如,在ISC DHCP中,可以使用android发送的string来定义一个类或几个子类:

 class "Android" { match if substring(option vendor-class-identifier,0,5) = "dhcpd"; } 

您可以将这些信息注册到日志文件中进行debugging,添加到您的cfg文件中:

 log (debug, substring (option vendor-class-identifier, 0, 5));