Android init.rc服务套接字数据流,“Connection Refused”

时间:2017-02-08 22:12:43

标签: android linux sockets

我正在开发一个使用tcpdump获取网络数据的项目。为了简化问题,让我们用我写的脚本替换tcpdump。

#!/system/bin/sh
while :
do
     echo print out from socket
     sleep 1
done

我把它放在手机上的/ system / xbin / echo_test下

-rwxr-xr-x root     root           70 2017-02-08 12:15 echo_test

所以当我输入我的命令“echo_test”时,它会不断打印出“从套接字打印”来模拟数据。

现在是真正的交易,从服务运行此脚本并在手机启动时通过套接字传输数据,我拿起启动映像并修改了ramdisk。

在init.rc文件中,我添加了以下行。

service echo_test /system/xbin/echo_test
     user root
     group root
     class late_start
     seclabel u:r:init:s0
     socket echo_test stream 0666 system system

在file_contexts文件中,我使用现有的SELinux上下文添加了我的套接字文件。

/dev/socket/echo_test   u:object_r:logd_socket:s0

我选择了logd_socket,因为似乎有一个现有的logd套接字文件(如果我在这里做错了,请告诉我......)

/dev/socket/logd    u:object_r:logd_socket:s0

然后我重新打包了启动映像并闪回了手机。手机启动没有任何问题。但是当我用netcat测试套接字时,我收到“拒绝连接”错误。当我尝试从Java访问套接字时遇到了同样的错误。

root@hammerhead:/ # netcat -U /dev/socket/echo_test                                               
Ncat: Connection refused.

Netcat在其他unix域套接字上表现良好,

root@hammerhead:/ # netcat -U /dev/socket/logd                                               
500 Command too large for buffer

检查kmsg只给我这一行:

root@hammerhead:/ # cat /proc/kmsg | grep echo_test
<5>[    3.409779] init: Starting service 'echo_test'...

Netstat还显示套接字处于活动状态。

root@hammerhead:/ $ netstat | grep echo_test
unix  2      [ ]         STREAM                     6360         /dev/socket/echo_test

这是套接字文件权限,

srw-rw-rw- system   system            u:object_r:logd_socket:s0 echo_test

我在这里缺少什么?提前谢谢。

编辑:

我正在使用Nexus 5和Android 6.0.1

0 个答案:

没有答案