Android 10访问/proc/net/arp ARP表格权限被拒绝

6

使用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);
         }
      }
2个回答

8
运行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]。

2
“ip neigh show” 在 Android 11 设备上似乎不再起作用(且应用程序的目标 SDK 为 30 或更高版本)。 - Dieter27
麻烦,猫和老鼠。我还在使用我的手机10版本,但我在我的一个应用程序中积极使用它... - Gábor
有没有针对目标30的解决方案?@Dieter27D - Sagar gujarati

5
Android 10引入了几项与隐私相关的限制,禁止应用程序访问可能被滥用进行指纹识别和数据收集的某些信息。其中之一是在运行Android 10或更高版本的设备上访问/proc/net文件系统的限制,应用程序无法访问包含有关设备网络状态的信息的/proc/net。需要访问此信息的应用程序(如VPN)应使用NetworkStatsManagerConnectivityManager类。
当前的Android API不允许应用程序访问ARP缓存。我看到在Google问题跟踪器中提出了一个错误,目前处于以下状态 - https://issuetracker.google.com/issues/130103885
状态:无法解决(不可行)。我们已将您的反馈传达给内部团队,他们正在评估其是否适用于未来的发布。目前我们将关闭此问题,并感谢您发送反馈!

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

相关主题 [Android Q中访问/proc/net/tcp] - https://dev59.com/9bfna4cB1Zd3GeqPlQrB#58501039


为什么Termux应用程序仍然可以执行这些调用? - Vygintas B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接