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

Android 12本地仅用热点下如何获取连接设备的IP、主机名等信息?

Android 12 本地仅用热点连接设备信息获取方案

针对Android 12中用于车载投影的本地仅用热点(LocalOnlyHotspot),由于系统默认不会将连接设备的IP、主机名、MAC地址同步给第三方应用,常规的WifiManager、TetheringManager无法获取这些数据,以下是可行的实现思路:

1. 读取系统DHCP租约文件(需ROOT权限)

本地仅用热点的DHCP服务由dnsmasq维护,所有连接设备的租约信息会存在/data/misc/dnsmasq/dnsmasq.leases文件里,每行格式为:[租期时间] [MAC地址] [IP地址] [主机名] [客户端ID]。

  • 操作步骤:
    • 获取ROOT权限后,直接读取该文件内容
    • 按行拆分字段,提取所需的MAC、IP和主机名
  • 代码示例:
    try {
        Process process = Runtime.getRuntime().exec("cat /data/misc/dnsmasq/dnsmasq.leases");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            String[] entries = line.split("\\s+");
            if (entries.length >= 4) {
                String macAddr = entries[1];
                String ipAddr = entries[2];
                String hostname = entries[3];
                // 处理获取到的设备信息
            }
        }
        reader.close();
        process.waitFor();
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
    

2. 解析ARP缓存表(无需ROOT,无主机名)

ARP缓存表记录了局域网内IP与MAC的映射,存储在/proc/net/arp文件中,Android 12允许普通应用读取该文件(需申请ACCESS_NETWORK_STATE权限)。

  • 操作步骤:
    • 先通过ConnectivityManager监听网络状态,定位到本地仅用热点对应的子网(默认多为192.168.43.0/24)
    • 读取/proc/net/arp,过滤出该子网内的有效条目(状态为0x2表示已连接)
    • 主机名需额外通过MDNS查询或反向DNS解析获取
  • 代码示例:
    try {
        BufferedReader reader = new BufferedReader(new FileReader("/proc/net/arp"));
        String header = reader.readLine(); // 跳过表头行
        String line;
        while ((line = reader.readLine()) != null) {
            String[] parts = line.split("\\s+");
            String ip = parts[0];
            String mac = parts[3];
            String status = parts[5];
            // 筛选已连接且属于热点子网的设备
            if ("0x2".equals(status) && ip.startsWith("192.168.43.")) {
                // 处理IP和MAC,后续补充主机名
            }
        }
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

3. 主动扫描局域网设备(无需ROOT,效率一般)

通过扫描热点子网内的所有IP,结合ping判断设备存活,再用MDNS查询获取主机名,ARP获取MAC。

  • 操作步骤:
    • 通过LocalOnlyHotspotReservation.getWifiConfiguration()获取热点网关,推导子网范围(比如网关为192.168.43.1,则子网为192.168.43.2~192.168.43.254)
    • 遍历子网IP,执行ping -c 1 [ip]判断设备是否存活
    • 对存活IP,用NsdManager发送MDNS查询获取主机名
  • 注意:需要申请INTERNET和ACCESS_NETWORK_STATE权限,部分设备可能限制ICMP ping请求。

权限总结

  • ROOT权限:仅方案1需要,用于访问系统私有目录
  • 普通权限:ACCESS_NETWORK_STATE、INTERNET,部分设备扫描局域网需ACCESS_FINE_LOCATION权限

内容的提问来源于stack exchange,提问作者pravin kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:53