You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin应用中实现非Root设备热点连接设备的主机名解析

非Root设备热点客户端IP与主机名解析的Kotlin实现方案

一、获取热点的IP网段范围

Android热点默认使用固定网段(常见如192.168.43.0/24),但最好动态获取当前热点的DHCP信息来确定遍历范围:

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val dhcpInfo = wifiManager.dhcpInfo
val gatewayIp = dhcpInfo.gateway // 热点自身IP,比如192.168.43.1
val subnetMask = dhcpInfo.netmask
// 计算子网基础IP,后续遍历1-254的主机位
val baseIp = gatewayIp and subnetMask

二、遍历子网IP并解析主机名

解析主机名的操作是阻塞的,必须放在子线程执行,推荐用Kotlin协程处理:

val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
scope.launch {
    for (hostBit in 1..254) {
        // 拼接完整IP地址
        val targetIp = baseIp or hostBit
        val ipString = String.format(
            "%d.%d.%d.%d",
            (targetIp shr 24) and 0xFF,
            (targetIp shr 16) and 0xFF,
            (targetIp shr 8) and 0xFF,
            targetIp and 0xFF
        )
        try {
            val inetAddress = InetAddress.getByName(ipString)
            // 先判断设备是否可达,避免无效等待
            if (inetAddress.isReachable(1000)) {
                val hostName = inetAddress.hostName
                // 切换到主线程更新UI,展示IP和主机名
                withContext(Dispatchers.Main) {
                    val displayName = if (hostName != ipString) hostName else "未知设备"
                    // 这里将ipString和displayName添加到UI列表中
                }
            }
        } catch (e: IOException) {
            // 该IP无设备或解析失败,直接跳过
            continue
        }
    }
}

三、必要配置与注意事项

  • 权限声明:在AndroidManifest.xml中添加所需权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- Android 10+ 需要定位权限才能获取热点DHCP信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • 非Root限制:非Root设备无法直接读取ARP缓存(更高效的设备识别方式),只能通过子网遍历+DNS解析,速度较慢,建议控制超时时间(示例中用1秒)。
  • 主机名兼容性:部分设备不会返回自定义主机名,此时hostName会等于IP字符串,需做判断显示“未知设备”。

内容的提问来源于stack exchange,提问作者David Ansu Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.09 08:03:10