最简单的方法可能是编写一个循环来监视/ proc / net / tcp或/ proc / net / tcp6。 但是,由于我需要立即得到通知,所以效率太低。 我最近看到的是可以提供任何文件上IO事件的callback函数。 问题是procfs不是普通的文件系统,inotify似乎不支持它(至less不是/ proc / net / tcp和/ proc / net / tcp6)。
此外,我不希望该程序具有root权限以实现此目的。
编辑:我删除了用户空间连接的要求。 此外,我希望有一个内置的内核支持,如inotify可以实现这一点。 在我的情况下,操纵iptables甚至可能是太侵入了。
任何人有任何想法? 谢谢!!
您可以将日志记录规则添加到本地iptables
配置中,以便在启动新连接时记录消息,然后使日志文件可由非root用户读取。 这会让你(a)立即通知事件(你可以使用inotify来检测对文件的写入)和(b)检测进程本身不需要root权限。
我能想到的最好的事情是尝试运行一个板载代理,并说服其他应用程序通过它连接。 有些人试图通过改变APN设置来做到这一点。
但是,这是丑陋的,可能不适用于所有版本,并可能被规避。
不幸的是,Android的目的并不在于允许最终用户对系统本身的行为进行可选的改进,而不会打开整个事物(即生根)。
使用原始套接字监控出站流量当然是可能的。 请参阅手册页(7)了解如何做到这一点。 但是,这可能不是你想要的。
如果启用连接跟踪,则可以使用netlink从内核获取新连接的通知。 用于完成这些事情的API是很糟糕的,所以请考虑查看已经完成的程序的来源。 我认为“conntrack”二进制文件可能提供了一些发行版(我不确定它是什么的一部分)。