我正在开发一个使用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