1

我想用 C/C++ 获取到我的服务器的 SYN 和 ESTABLISHED 连接数。但我不想调用 popen 来运行 netstat 或任何其他 Linux 命令。我已经设法扫描 /proc/net/ip_conntrack 并获得了数字。但我意识到扫描 ip_conntrack 需要大量资源,每次我的应用程序调用该方法时。还有其他简单的方法吗?

4

1 回答 1

2

扫描/proc/net/ip_conntrack不可靠,因为它仅在启用 netfilter/连接跟踪时才有效。它不仅计算与服务器的连接还计算通过服务器的连接(如果它充当路由器)。

更好的办法是在相同的地方获取信息netstat/proc/net/tcp, /proc/net/tcp6(如果你关心这些,UDP 和其他协议的类似文件)。netstat不过,在您的应用程序中重新实现的数量或多或少。你不得不怀疑它是否值得。此外,它是可移植的(或多或少)调用netstat,而直接读取这些文件是 Linux 特定的。

我知道您担心每次扫描整个表所需的资源,但我认为没有“订阅”的说法,并在新连接建立或断开时收到通知。我能想到的最接近类似的事情是嗅探网络接口(使用 libpcap)并自己跟踪连接设置和拆卸。

于 2012-01-13T05:58:08.057 回答