如何在Linux中进行新的TCP连接被动监控?

时间:2012-05-04 19:30:49

标签: android linux tcp callback connection

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

此外,我不希望程序具有root权限以实现此功能。

编辑:我删除了用户空间连接的要求。此外,我希望有一个内置的内核支持,如inotify,可以实现这一点。在我的案例中,操纵iptables甚至可能过于干扰。

任何人都有任何想法?谢谢!!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

不幸的是,Android并不是为了让最终用户能够安装对系统本身行为的可选改进,而不是破解整个事情(即生根)。

答案 2 :(得分:1)

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

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