我希望通过C / C ++获得与服务器的SYN和ESTABLISHED连接数。但我不想调用popen来运行netstat或任何其他Linux命令。我已设法扫描/ proc / net / ip_conntrack并获取数字。但我意识到每次我的应用程序调用该方法时,扫描ip_conntrack需要很多资源。还有其他简单的方法吗?
答案 0 :(得分:2)
扫描/proc/net/ip_conntrack
不可靠,因为它仅在启用了netfilter /连接跟踪时才有效。它不仅可以计算服务器到的连接数,还可以计算到服务器(如果它充当路由器)。
最好是将信息放在与netstat
相同的位置:/proc/net/tcp
,/proc/net/tcp6
(如果您关心这些信息,还可以使用UDP和其他协议的类似文件)。这个数量或多或少会在您的应用程序中重新实现netstat
。你不得不怀疑它是否值得。此外,调用netstat
是可移植的(或多或少),而直接读取这些文件则是特定于Linux的。
我知道您担心每次都需要扫描整个表格的资源,但我认为没有发言“订阅”并在建立或拆除新连接时收到通知。我能想到的最接近的事情就是嗅探网络接口(使用libpcap)并跟踪连接设置并自行拆解。