Are traditional OS-fingerprinting techniques effective in identifying Android smartphones (OS version) on a network. From my research I found most Android network mappers can be only run from Android platforms and tools such as nmap are unsuccessful.

1. Android 1.5 Cupcake Linux kernel 2.6.27
2. Android 1.6 Donut Linux kernel 2.6.29

..............................................................
3. Android 4.0.x Ice Cream Sandwich Linux kernel 3.0.1

What are the best ways of identifying a smartphone or any other WiFi enabled smart devices on a network? Secondly how can I differentiate between smart devices and actual physical machines (server/desktop)?