使用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(应使用NetworkStatsManager
或ConnectivityManager
类。
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