私は、特定のファイル記述子または指定されたインタフェースのいずれかのTCPペイロードアクティビティ(受信バイト総数)のカウンタを検索したいと思います。好ましくは、与えられたファイル記述子であるが、インタフェースに対しては十分である。理想的には、私は本当に、まだユーザー空間に読み込まれていないバイトであっても(まだですか?)、確認済みのバイトについて知りたいと思っています。TCPペイロードアクティビティ/統計情報を確認する
私はgetsockopt()
のTCP_INFO
機能を見たことがありますが、これまでのところ、「受信した合計バイト数」または「送信された合計バイト数(acked)」は表示されていません。
私もインターフェイスのためのnetlink
IFLA_STATS
+ RTNL_TC_BYTES
とSIOCETHTOOL
+ ETHTOOL_GSTATS
ioctl()
(rx_bytes
フィールドを)見てきた、そしてそれらは素晴らしいですが、私は、彼らが頭上を区別することができるでしょうとは思いません/他のレイヤーのヘッダーと実際のペイロードバイト。
procfs
は/proc/net/tcp
ですが、これには私が探しているものは含まれていないようです。
この特定のデータを取得する方法はありますか?
EDIT:プロミスキャスモードはスループットに耐え難い影響を与えます。そのため、それを使用するものは何も活用できません。言うまでもなく、IPスタックの大部分を実装して、どのパケットが適切かを判断することは、このソリューションの意図した範囲外です。
私は、recvmsg()からどのような値を格納するのかを知る/信頼できない/第二に推測することを目標にしています。
Right Thing™を実行するには、これらの値を正しく記録することが重要ですが、単純な「Hey OS」を持つことは価値があります。実際にはがこのソケットで受信されましたか?
'iptables'を使ってカウントを行うことができます。しかし、この回答は面白いです:http://superuser.com/a/264651 – alk
libpcapを使用できますか? モニタインターフェイスを設定して、必要なパケットの種類を正確に取得し、それらのパケットが条件を満たす場合はカウンタを増分するだけです。 –