如何解决在具有root用户权限的Android设备上,如何打开<1024的端口?
| 我正在尝试在运行2.3.3的扎根Galaxy Tab上打开端口123。该应用程序以超级用户权限启动,并具有INTERNET权限。但是,我得到以下异常: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)
我已经进行了一些搜索,但没有找到正确的方法。任何人都有提示或示例吗?
解决方法
我相信您对应用程序“使用超级用户权限启动”的假设是错误的。该应用程序本身在Dalvik VM中运行,这意味着它不能拥有超级用户权限。使用\“ su \”命令启动的任何应用程序都可以拥有root权限,因此可以打开<1024端口。但是Android应用程序本身不能。有关此问题的讨论,请参阅AOSP问题4039,并对Dalvik VM进行投票以获取此支持。
如果您只想启动NTP服务器,则最好将ntpd与您的应用程序打包,然后通过
su
启动它。或者,您可以尝试在非标准端口上启动Java NTP服务器,然后使用命令行实用程序(例如netcat)将受保护的端口123“代理”到非标准(> = 1024)端口中..类似的东西:nc -l -u localhost 123 | nc -u localhost 1123
(Wikipedia)
, 事实证明,ntpd实际上在设备上可用。因此,出于我的目的,我刚刚启动了本地ntpd服务器:
ntpd -l 123
而且它也可以按我的需要工作。我将不得不尝试使用非root用户的设备并使用上面的重定向方法来做同样的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。