3

最简单的方法可能是编写一个循环来监控 /proc/net/tcp 或 /proc/net/tcp6。但是,这太低效了,因为我几乎需要立即得到通知。我看到的最接近的东西是 inotify,它可以为任何文件的 IO 事件提供回调。问题是 procfs 不是常规文件系统,并且 inotify 似乎不支持它(至少不支持 /proc/net/tcp 和 /proc/net/tcp6)。

此外,我不希望程序具有 root 权限来实现这一点。

编辑:我删除了用户空间连接的要求。另外,我希望有一个内置的内核支持,比如 inotify 可以实现这一点。在我的情况下,操作 iptables 甚至可能过于侵入。

有人有什么想法吗?谢谢!!

4

3 回答 3

2

您可以在本地iptables配置中添加一条日志记录规则,该规则将在每次启动新连接时记录一条消息,然后使非 root 用户可以读取该日志文件。这将使您 (a) 立即通知事件(您可以使用 inotify 检测对文件的写入)和 (b) 检测进程本身不需要 root 权限。

于 2012-05-04T19:33:08.247 回答
1

我能想到的最好的事情是尝试运行一个板载代理并说服其他应用程序通过它进行连接。有些人试图通过更改 APN 设置来做到这一点。

但这很丑陋,可能不适用于所有版本,并且可能会被规避。

不幸的是,Android 的设计目的并不是允许最终用户安装对系统本身行为的可选改进,而不是打开整个系统(即生根)。

于 2012-05-05T01:45:47.333 回答
1

当然可以使用原始套接字监控出站流量。请参阅数据包 (7) 的手册页以了解如何执行此操作。但是,这可能不是您想要的。

如果启用了连接跟踪,则可以使用 netlink 从内核获取新连接的通知。执行这些操作的 API 很糟糕,因此请考虑查看已经执行此操作的程序的源代码。我认为“conntrack”二进制文件可能会提供一些发行版(我不确定它是什么的一部分)。

于 2012-05-05T22:20:58.563 回答