4

使用 ARP 表,我们可以访问 Android 9 及更早版本的热点连接设备的 IP 和 MAC。现在来自 Android 10 的权限被拒绝。请建议我如何在 Android 10 中访问连接设备的 IP 和 MAC 地址。下面的代码适用于 Android 9 版本,但不适用于 Android 10。

   BufferedReader br = new BufferedReader(new FileReader("/proc/net/arp"));
   String line;
   while ((line = br.readLine()) != null) {
        String[] clientInfo = line.split(" +");
        if(!clientInfo[3].equalsIgnoreCase("type")) {
               String mac = clientInfo[3];
               String ip = clientInfo[0];
               textView.append("\n\nip: " + ip + " Mac: " + mac);
               Log.d("IP : ", ip);
               Log.d("Mac : ", mac);
         }
      }
4

2 回答 2

7

运行ip neigh show命令并处理其输出:

  val runtime = Runtime.getRuntime()
  val proc = runtime.exec("ip neigh show")
  proc.waitFor()
  val reader = BufferedReader(InputStreamReader(proc.inputStream))

您以相同的方式拆分线路,IP 为 [0],MAC 为 [4]。

于 2020-09-19T19:34:22.210 回答
4

Android 10 引入了一些与隐私相关的限制,禁止应用访问某些可能被滥用于指纹识别和数据收集的信息。其中之一是限制在/proc/net运行 Android 10 或更高版本的设备上访问文件系统,应用程序无法访问/proc/net,其中包括有关设备网络状态的信息。需要访问此信息的应用程序(例如 VPN)应使用NetworkStatsManagerorConnectivityManager类。

Android 中的当前 API 不允许应用访问 ARP 缓存。我看到 Google 问题跟踪器中出现了一个错误,目前处于以下状态 - https://issuetracker.google.com/issues/130103885

状态:无法修复(不可行)我们已将您的意见传递给我们的内部团队,他们正在评估它以供将来发布。我们暂时关闭此问题,感谢您向我们发送反馈!”

https://developer.android.com/about/versions/10/privacy/changes#proc-net-filesystem

相关线程 [/proc/net/tcp在 Android Q 中访问] - https://stackoverflow.com/a/58501039/4694013

于 2020-06-24T08:46:06.950 回答