【问题标题】:Android 10 - netstat execution not working properlyAndroid 10 - netstat 执行无法正常工作
【发布时间】:2020-11-17 04:21:33
【问题描述】:

我正在尝试在我的 Android 应用程序中运行 shell 命令,以检查给定的 tcp port 是否已打开:

Runtime.getRuntime().exec(arrayOf("/system/bin/sh", "-c", "netstat -tulpn | grep :8080"))

在 Android 版本

但在 Android 10 中,它不再工作了。进程 exec 将返回:

Process[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 linux shell runtime.exec android-shell


    【解决方案1】:

    我的目标是检查给定的 tcp port 是否正在使用中。我做了这个方法来完成我正在寻找的工作:

    private fun isPortUsed(port: Int): Boolean {
        return try {
          // Try to open socket at the given port
          val socket = ServerSocket(port)
          // Release port
          socket.close()
          false
        } catch (ex: BindException) {
            // Port is already in use
            true
        } catch (ex: Exception) {
            // Other reason for failing
            false
        }
    }
    

    【讨论】:

    • 检查端口是否在使用中的一般思路是正确的。但是,由于某些原因,这将是不可靠的。还有第三种选择,打开套接字可能会由于不同的原因而失败,在您的代码中将错误地返回端口被占用。尝试查找在使用端口时引发的更具体的异常。
    • 你是对的。我编辑了我的问题。如果失败的原因是因为端口已经在使用中,它将通过BindException。谢谢?
    • 很高兴能帮上忙。请记住,如果您觉得我的评论有帮助,您可以点赞。
    【解决方案2】:

    这很可能是因为 Android 10 中改进了隐私保护。

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

    【讨论】:

    • 建议使用NetworkStatsManagerConnectivityManager 但我不确定是否可以使用它们扫描设备中已使用的tcp 端口。
    • @user677767 我怀疑您不能使用这些 API 进行端口扫描。如果什么都不会出现,我会在明天验证。您对运行应用程序的设备有多少控制权?可以将应用安装为系统应用吗?
    • 没有。该应用程序作为普通的第三方应用程序通过 Play 商店安装。我有兴趣对正在使用的 tcp 端口进行扫描。
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多