我有一个类似任务的要求,如中提到的这个链接。 https://kristrev.github.io/2013/07/26/passive-monitoring-of-sockets-on-linux/。 Android 中套接字的被动监控。一种方法是解析 /proc/net/{tcp,udp,...} 表。但我们必须不断地阅读,不断地监测;这不是有效的方法。由于它将是一个移动设备应用程序,它会消耗电池,因为它需要 CPU 时间来持续监视时间间隔(例如 1 秒)。
但是,我正在寻找一种基于事件的方法。当我用谷歌搜索同样的内容时,我最终选择了 NETLINK 来监视套接字。但我观察到 Android NDK 不支持
#include <linux/sock_diag.h>
#include <linux/inet_diag.h>
#include <linux/unix_diag.h>
#include <linux/packet_diag.h>
#include <linux/netlink_diag.h>
有人尝试过在 Android 中使用 NETLINK 来监视 INET 套接字吗?如果是这样,请分享信息。
Thanks.
更新:
我尝试将上述文件复制粘贴到“jni”文件夹中,并使用 ndk-build 进行构建。构建成功,运行时也没有崩溃。但是,类型的套接字创建
socket(AF_NETLINK, SOCK_DGRAM, NETLINK_INET_DIAG)
失败并出现错误 EACCES(13) - 创建指定类型和/或协议的套接字的权限被拒绝。
有什么建议如何进一步进行吗?
在 Android Lollipop 中,Android 中的安全增强型 Linux (SELinux) 在“强制”模式下启用。通过观察/查看沙箱定义Android 源代码 - SE 政策 https://android.googlesource.com/platform/external/sepolicy/app.te(下面粘贴的摘录)中,不会有任何对 netlink 套接字的支持。
app.te
# Privileged netlink socket interfaces.
neverallow appdomain
self:{
netlink_socket
netlink_firewall_socket
netlink_tcpdiag_socket
netlink_nflog_socket
netlink_xfrm_socket
netlink_audit_socket
netlink_ip6fw_socket
netlink_dnrt_socket
} *;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)