2012-09-28 57 views
2

我使用libpcap捕獲數據包。我正在計算有效載荷大小here size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
現在,對於數據包,size_payload是1228,以太網報頭是14個字節,IP報頭是20個字節,TCP報頭是32個字節。而header.caplenheader.len是1514字節。 size_payload+size_ip+size_tcp+size_ethernet不應該等於header.caplen? 另外,當我使用tcpdump轉儲相同的數據包時,捕獲長度顯示爲1514。爲什麼這些不同?我預計ntohs(ip->ip_len)等於header.caplenheader.len使用libpcap時數據包長度不匹配

編輯
我預計ntohs(ip->ip_len)等於header.caplenheader.len。但我覺得是ntohs(ip->ip_len) = 1280header.caplen = header.len = 1514

+0

你在做什麼操作系統捕獲?你是什​​麼意思「另外,當我使用tcpdump轉儲相同的數據包時,捕獲長度顯示爲1514.」?你說這個「不同」,但是如果你在你的程序中說'header.caplen'是1514,並且tcpdump顯示「捕獲長度」爲1514,那聽起來好像他們報告的是同樣的東西。 – 2012-09-30 01:12:49

回答

1

caplen說多少包可能被捕獲,不一定有多少實際上是。您需要將該值與len字段進行比較。

如果caplen >= len你知道你應該有整個數據包內容可用。否則,數據包捕獲已被截斷。

+0

在這種情況下,'caplen'和'len'是相等的(都是1514字節)。我有一個很大的'SNAPLEN'。但'ip_len'是1280字節。 –