I noticed this recently, that the UniFi management interface would show some clients as just their mac addresses instead of the host names like most other devices.
Searching I found this one, but it was after an update, I did not update the software.
Then I found this thread which was more what I was looking for, which tells me how the name is retrieved … “DHCP Snooping”.
Alright, so taking a look at the DHCP server, I noticed it was indeed empty names on the IPs that were given out.
“Hostname is used to easily identify and remember hosts connected to a network. It’s set on boot, e.g. from /etc/hostname on Linux based systems. Hostname is also a part of DHCPREQUEST (standardized as code 12 by IETF) which a DHCP client (Android device in our case) makes to DHCP server (WiFi router) to get an IP address assigned. DHCP server stores the hostnames to offer services like DNS. See details in How to ping a local network host by hostname?.
Android – instead of using Linux kernel’s hostname service – used property net.hostname (since Android 2.2) to set a unique host name for every device which was based on android_id. This hostname property was used for DHCP handshake (as added in Android 2.2 and 4.0). In Android 6 net.hostname continued to be used (1, 2, 3, 4) in new Java DHCP client when native dhcpcd was abandoned and later service was removed in Android 7. Since Android 8 – when android_id became unique to apps – net.hostname is no more set, so a null is sent in DHCPREQUEST. See Android 8 Privacy Changes and Security Enhancements:
net.hostname is now empty and the dhcp client no longer sends a hostname
So the WiFi routers show no host names for Android 8+, neither we can set / unset / change it.
However on rooted devices you can set net.hostname manually using setprop command or add in some init’s .rc file to set on every boot. Or use a third party client like busybox udhcpc to send desired hostname and other options to router. See Connecting to WiFi via ADB Shell.”
Summary…. Thumbs up… man!