Android Q /system/bin/ip不再可执行了

0 人关注

我们的应用程序中有一个功能(TargetSDK = 30),可以扫描当前wifi网络中的设备。 我们做的其中一件事是调用

Runtime.getRuntime().exec("/system/bin/ip neigh show")

最后从stdout提取mac-addresses。 这段代码在安卓Q/10系统下工作正常,但在运行安卓11系统的Pixel 2上,外部进程立即退出,退出代码为1(没有抛出异常)。

另一方面,调用/system/bin/ping运行没有任何问题。

我检查了安卓11的文档(https://developer.android.com/about/versions/11),但 无法找到关于新限制的任何提示。

有谁有线索吗?

5 个评论
请注意,没有要求任何特定的设备模型有任何特定的命令行二进制,更不用说在任何特定的目录中。
@CommonsWare 我知道,但二进制文件就在那里,可以从adb shell运行,没有问题。
"但二进制文件就在那里" -- 在你测试的特定设备上,是的。有大约25亿台Android设备。"我检查了Android 11的文档" -- 设备上的命令行二进制文件不是SDK的一部分。一般来说,那里的变化是不会被记录下来的。"有没有人有线索?"-- 识别附近WiFi设备的能力代表了隐私泄露,因为你可能会使用这些信息来识别设备的位置。因此,他们可能只是限制了哪些程序可以运行该二进制文件。
@CommonsWare 你说的都是对的,但这不是我问的,你告诉我的是我已经知道的事情。谢谢你,不过
android
networking
Michael Kellner
Michael Kellner
发布于 2021-03-12
1 个回答
EAK TEAM
EAK TEAM
发布于 2021-12-06
0 人赞同

自安卓11(SDK 30)以来

此外,非特权应用程序不能访问设备的MAC 地址;只有具有IP地址的网络接口是可见的。这 影响getifaddrs()和NetworkInterface.getHardwareAddress() 方法,以及发送RTM_GETLINK网络链接消息。

以下是应用程序受此影响的方式列表

NetworkInterface.getHardwareAddress()对每个接口都返回null。 接口都返回null。应用程序不能在NETLINK_ROUTE上使用bind()函数。

ip命令不返回有关接口的信息。

应用程序不能发送RTM_GETLINK消息。请注意,大多数开发者 应该使用 ConnectivityManager 的高层 API,而不是 较低级别的API,如NetworkInterface、getifaddrs(),或Netlink