1

我有此链接中提到的类似任务的要求。. 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 套接字?如果是这样,请分享信息。

谢谢。


更新:我尝试将上述文件复制粘贴到“jni”文件夹中并使用 ndk-build 构建。构建成功,运行时也没有崩溃。但是,类型的套接字创建

socket(AF_NETLINK, SOCK_DGRAM, NETLINK_INET_DIAG)

失败并出现错误 EACCES(13) - 创建指定类型和/或协议的套接字的权限被拒绝。

任何建议如何进一步进行?

4

2 回答 2

3

在 Android Lollipop 中,Android 中的安全增强型 Linux (SELinux) 在“强制”模式下启用。通过观察/查看沙盒定义Android 源代码 - app.te 的 SE 策略(下面粘贴的摘录),将不支持 netlink 套接字。

应用程序

# 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
 
    } *;
于 2014-12-09T06:58:14.107 回答
0

我认为,您的应用程序应该具有 root 权限!

于 2019-05-27T15:01:46.470 回答