使用libpcap时数据包长度不匹配

时间:2012-09-28 19:42:46

标签: networking network-programming wireshark libpcap tcpdump

我正在使用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

修改
我希望ntohs(ip->ip_len)等于header.caplenheader.len。但我发现ntohs(ip->ip_len) = 1280header.caplen = header.len = 1514

1 个答案:

答案 0 :(得分:1)

caplen表示可以可以捕获多少数据包,而不一定是实际捕获的数量。您需要将该值与len字段进行比较。

如果您caplen >= len知道您应该拥有整个数据包内容。否则,数据包捕获已被截断。