【问题标题】:How to bind to a port less than 1024 in Android?如何在Android中绑定小于1024的端口?
【发布时间】:2011-12-13 19:53:08
【问题描述】:

我有一个 Android 服务试图绑定到服务器套接字端口 24。由于它是特权端口,因此它因绑定异常而失败。 我想知道我需要做什么才能让这个工作。 我看到这个问题在这个论坛上被问了几次,但没有一个解决方案。

此服务在运行 Android 的设备上运行。我们为设备构建安卓平台。我们拥有所需的所有控制权。

【问题讨论】:

  • 根据一般的 Linux 知识,只有以 root 身份运行的进程才能侦听端口 24。您甚至可以以 root 身份运行 Java 应用程序吗?
  • 同意。该进程必须以 root 身份运行,或者可能以具有管理员权限的用户 ID 身份运行(不确定 Android 是否支持该 Linux 概念)。通常,如果您控制设备,则不是用 Java 编写守护程序,而是用 C/C++ 编写,并使用普通的 Linux 守护程序支持来启动它们。
  • 提升权限的“su ...”方式不是一个选项,因为我绑定到一个端口。我不是想生成一个 shell 脚本。由于每个 android 应用程序基本上都是从 zygote 派生的进程,除非 zygote 基于 SOMETHING 提升权限,否则您无法绑定。我想知道 zygote 是否允许这样做。如果有,那是什么东西?

标签: android port privilege rooted-device


【解决方案1】:

要绑定到小于 1024 的端口,您需要是 root,有两种方法可以做到这一点。

  1. 系统应用程序:应用程序应安装到 /system/apps 文件夹中,从该文件夹中以 root 身份运行。但是,有一些签名问题的帮助是available。分发也是系统应用程序的一个问题。

  2. su 二进制:可以使用简单的exec("su -c [command]") 调用 su 二进制。但事情说起来容易做起来难。您需要运行一个 android 进程而不仅仅是一个命令。因此,libsuperuser 为您提供方法并具有完整长度的doc page

【讨论】:

  • 郑重声明,用1就算你变成系统应用了,你依然不是root运行,只有system,仍然不能绑定低端口。
【解决方案2】:

这是一个非常相似的问题:Run secure API calls as root, android,尽管他们出于不同的原因尝试以 root 身份运行。

这让我想知道安装“系统应用程序”,我看到了这个:https://android.stackexchange.com/questions/27/rooted-how-to-install-a-system-app

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多