私はこのようなtcpdumpを持っています
sudo tcpdmp tcp -n -i eth0 -w test.dmp
eth0 を通過する tcp バイト数を計算したいと考えています。上記のように tcpdump を使用してすべてのパッケージをキャプチャします。ファイルサイズはバイト数と同じですか、それとも tcpdump がダンプファイルに追加情報を追加しますか?
私はこのようなtcpdumpを持っています
sudo tcpdmp tcp -n -i eth0 -w test.dmp
eth0 を通過する tcp バイト数を計算したいと考えています。上記のように tcpdump を使用してすべてのパッケージをキャプチャします。ファイルサイズはバイト数と同じですか、それとも tcpdump がダンプファイルに追加情報を追加しますか?
はい、tcpdumpはファイルに追加情報を追加します。
(現在)pcap形式でのみ書き込みます。つまり、ファイルの先頭に24バイトのヘッダーがあり、ファイル内のパケットのリンク層ヘッダータイプなどの情報を提供するため、最初に行う必要があるのはファイルのサイズから24を引くことです。
さらに、各パケットには16バイトのヘッダーがあり、パケットの到着タイムスタンプ、パケットの長さ、およびキャプチャされたパケットデータのバイト数を示します。これは、長さから16 * {パケット数}を差し引く必要があることを意味しますが、パケット数を取得する唯一の方法はファイルを読み取ることであるため、バイト数を確認するだけでは取得できません。ファイルサイズ!
また、tcpdumpの一部のバージョンでは、デフォルトで「スナップショットの長さ」が0に設定されていないため、キャプチャされるパケットデータのバイト数がネットワーク上のパケットバイト数より少ない場合があることにも注意してください。
したがって、あなたがすべきことは、すべてのパケットを読み取り、「パケットの長さ」を合計するプログラムを作成することです(libpcapはすでにpcap形式を知っており、それを理解するために独自のコードを作成する必要はありません)。すべてのパケットのfield(これは構造len
内のフィールドです。キャプチャされたパケットデータのバイト数であるため、は使用しないでください)。struct pcap_pkthdr
caplen
つまりeth0
、リンク層ヘッダーのタイプはおそらくイーサネットであり、たとえば、Wi-Fiアダプターでモニターモードでキャプチャしている場合のように、無線メタデータはありません。リンク層ヘッダーに余分なメタデータがある場合は、それを差し引く必要があります。