在 Android 10 中访问 /proc/net/arp ARP 表的权限被拒绝



使用ARP表,我们可以访问Android 9及更早版本中热点连接设备的IP和MAC。现在从 Android 10 拒绝相同的权限。请建议如何在Android 10中访问已连接设备的IP和MAC地址。下面的代码在最高安卓9版本中工作,但在安卓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("nnip: " + ip + " Mac: " + mac);
Log.d("IP : ", ip);
Log.d("Mac : ", mac);
}
}

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

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

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

最新更新