c++ - 如何计算与服务器的 SYN/ESTABLISHED 连接?

标签 c++ c netstat

我想使用 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/

相关文章:

c - 修复卡尔曼平滑函数

Linux:从哪里可以找到/proc 的 "segments retransmited"?

linux - 如果我有 10000 连接到我的运行在 linux 机器上的应用程序服务器,如果我 netstat 我应该看到什么?

ruby-on-rails - 如何为 Rails 应用程序设置允许的 IP 客户端

c++ - C++标点符号的使用逻辑是什么?

c++ - 在没有 UTC 时区的正确时间总和

c++ - 堆栈声明段错误

c++ - OpenCV convexhull 没有给出正确的输出

c - 重新分配两次后出现段错误

c - glibc 检测到 realloc() : invalid next size: 0x