我正在尝试在 Android 应用程序中运行 shell
命令,以检查给定的 tcp 端口
是否打开:
Runtime.getRuntime().exec(arrayOf("/system/bin/sh", "-c", "netstat -tulpn | grep :8080"))
在 Android 版本 < 10 中运行此命令可以正常工作。如果使用了给定的端口,它将进行全面扫描并返回条目。
但在 Android 10 中,它不再起作用了。进程执行将返回:
进程[pid=9534,hasExited=true,exitcode=1]
读取进程的inputStream
时,它始终为null
,而执行netstat -tulpn |正如预期的那样,来自终端的 grep :8080
将返回一个条目。
正在运行
Runtime.getRuntime().exec(arrayOf("/system/bin/sh", "-c", "netstat -tulpn"))
单独并解析输出,只会显示:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program Name
根本没有其他数据。
我仅在 Android 10 中遇到此问题,因为对于旧版本它可以正常工作。
Android 10 中有关 shell 命令的内容有什么变化吗?我有必要运行这个命令。 任何帮助将不胜感激...
最佳答案
这很可能是因为 Android 10 中的隐私保护得到了改进。
看这里:https://developer.android.com/about/versions/10/privacy/changes#proc-net-filesystem
关于Android 10 - netstat 执行无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63122056/