Linux ルーターで、pcap を使用して IP ヘッダーとパケットの長さを取得する C プログラムを作成しました。このようにして、統計を収集し、IP に基づいて帯域幅を測定することができます。かなりきれい。:-)
現在、トラフィックとユーザー数が増加しており、古いプログラムは苦労し始めています。つまり、ルーターは大量のパケットに対処するのに苦労しています。「プライムタイム」では、全体で 1 秒あたり 50000 パケットを超えています。
プログラム自体はかなり最適化されています。見せびらかしたくはありませんが、できる限り良いものだと信じています。IP ヘッダーとパケット長を読み取ります。次に、IP をインデックスに変換し (単純な減算のみ)、パケットの長さを配列に格納 (累積) します。ときどき (実際には SIGALRM)、配列を MySQL データベースに格納します。
私の質問は: イーサネット デバイスを利用して、ビットストリームを pcap よりも「安く」取得する方法はありますか?
もちろん、イーサネット ドライバーを変更して、単一の IP 統計収集を含めることもできますが、それは少しやり過ぎのように思えます。
基本的に、私のプログラムはビジーな eth0 の「tcpdump」であり、最終的にはルーターを強制終了します。