我想使用 C/C++ 获取到我的服务器的 SYN 和 ESTABLISHED 连接数。但我不想调用 popen 来运行 netstat 或任何其他 Linux 命令。我设法扫描了/proc/net/ip_conntrack 并获得了数字。但我意识到扫描 ip_conntrack 需要大量资源,每次我的应用程序调用该方法时。还有其他简单的方法吗?
最佳答案
扫描 /proc/net/ip_conntrack
是不可靠的,因为它仅在启用 netfilter/连接跟踪时才有效。它不仅计算到您的服务器的连接数,还计算通过您的服务器的连接数(如果它充当路由器)。
更好的方法是在与 netstat
相同的位置获取信息:/proc/net/tcp
, /proc/net/tcp6
(以及 UDP 和其他协议(protocol)的类似文件,如果您关心的话)。不过,这或多或少需要在您的应用程序中重新实现 netstat
。你不得不怀疑它是否值得。此外,调用 netstat
是可移植的(或多或少),而直接读取这些文件是特定于 Linux 的。
我知道您担心每次扫描整个表所需的资源,但我认为没有“订阅”并在建立或断开新连接时获得通知的说法。我能想到的最接近类似的事情是嗅探网络接口(interface)(使用 libpcap)并自己跟踪连接设置和拆卸。
关于c++ - 如何计算与服务器的 SYN/ESTABLISHED 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8846482/