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 に答える