android - 在已 root 的 Android 设备上,如何打开 < 1024 的端口?

标签 android root

我正在尝试在运行 2.3.3 的已 root Galaxy Tab 上打开端口 123。该应用程序以 super 用户权限启动并具有互联网权限。但是,我遇到以下异常:

E/xxxxxxxxxxxxxxxxxxxxxxxxx.AndroidServerActivity( 4809): Unable to startup the NTP Server..., java.net.BindException: Permission denied
W/System.err( 4809): java.net.BindException: Permission denied
W/System.err( 4809):    at org.apache.harmony.luni.platform.OSNetworkSystem.bind(Native Method)
W/System.err( 4809):    at dalvik.system.BlockGuard$WrappedNetworkSystem.bind(BlockGuard.java:268)
W/System.err( 4809):    at org.apache.harmony.luni.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:81)
W/System.err( 4809):    at java.net.DatagramSocket.createSocket(DatagramSocket.java:193)
W/System.err( 4809):    at java.net.DatagramSocket.<init>(DatagramSocket.java:77)
W/System.err( 4809):    at net.sf.atomicdate.NTPClient.<init>(NTPClient.java:79)
W/System.err( 4809):    at net.sf.atomicdate.NTPClient.<init>(NTPClient.java:66)
W/System.err( 4809):    at xxxxxxxxxxxxxxxxxxxxxxxxxActivity.onCreate(AndroidServerActivity.java:141)
W/System.err( 4809):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err( 4809):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
W/System.err( 4809):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
W/System.err( 4809):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
W/System.err( 4809):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
W/System.err( 4809):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 4809):    at android.os.Looper.loop(Looper.java:123)
W/System.err( 4809):    at android.app.ActivityThread.main(ActivityThread.java:3687)
W/System.err( 4809):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 4809):    at java.lang.reflect.Method.invoke(Method.java:507)
W/System.err( 4809):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
W/System.err( 4809):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
W/System.err( 4809):    at dalvik.system.NativeStart.main(Native Method)

我进行了一些搜索,但没有找到正确的方法。有人有任何提示或示例吗?

最佳答案

我认为您关于应用程序“以 super 用户权限启动”的假设是有缺陷的。该应用程序本身在 Dalvik VM 内运行,这意味着它无法拥有 super 用户权限。无论您使用“su”命令启动什么应用程序,都可以拥有root权限,因此可以打开端口<1024。但 Android 应用程序本身不能。请参阅 AOSP issue 4039就此事进行讨论,并为 Dalvik VM 投票以获得此支持。

如果您只想启动 NTP 服务器,您最好将 ntpd 与您的应用程序一起打包,并通过 su 启动它。 。或者,您可以尝试在非标准端口上启动 Java NTP 服务器,并使用命令行实用程序(例如 netcat)将 protected 端口 123“代理”到非标准 (>=1024) 端口。类似:nc -l -u localhost 123 | nc -u localhost 1123 (Wikipedia)

关于android - 在已 root 的 Android 设备上,如何打开 < 1024 的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338060/

相关文章:

android - 进行某种 onMeasure 缓存可能/安全吗?

java - Android - 替换字符串中的数据

android - 如何找到 Root设备?

python - 从根作业向用户发送显示

Android - 检查耳机按钮点击

java - 为什么java中无法提取Json数组?

c - 用于求平方根的最快汇编代码。需要解释

PHP 安全根

linux - 在 Vagrant 上配置期间如何以另一个用户身份执行命令?

android - 未使用 GCM 接收推送通知