2

を使用してパケットをキャプチャしていますlibpcapここで 指定されているペイロード サイズを計算していますsize_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
。現在、パケットの場合、size_payload1228、イーサネット ヘッダーは 14 バイト、IP ヘッダーは 20 バイト、TCP ヘッダーは 32 バイトです。header.caplenとはheader.len1514 バイトです。size_payload+size_ip+size_tcp+size_ethernetに等しいべきではありませんheader.caplenか? また、tcpdump を使用して同じパケットをダンプすると、キャプチャの長さは のように表示され1514ます。これらが異なるのはなぜですか?ntohs(ip->ip_len)私は等しいと予想しheader.caplenheader.len

EDIT
ntohs(ip->ip_len)はと等しいとheader.caplen思っていましたheader.lenntohs(ip->ip_len) = 1280しかし、私が見つけたのはheader.caplen = header.len = 1514

4

1 に答える 1

1

は、実際にキャプチャされcaplenたパケットの量を示すものであり、必ずしも実際にキャプチャされたものであるとは限りません。lenその値をフィールドと比較する必要があります。

caplen >= lenパケットの内容全体を利用可能にする必要があることがわかっている場合。それ以外の場合、パケット キャプチャは切り捨てられています。

于 2012-09-28T19:44:38.087 に答える