我正在使用libpcap
捕获数据包。我正在计算有效负载大小为here
size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
现在,对于数据包,size_payload
为1228,以太网头为14字节,IP头为20字节,TCP头为32字节。虽然header.caplen
和header.len
是1514字节。 size_payload+size_ip+size_tcp+size_ethernet
不应该等于header.caplen
吗?
此外,当我使用tcpdump转储相同的数据包时,捕获长度显示为1514
。为什么这些不同?我希望ntohs(ip->ip_len)
等于header.caplen
和header.len
修改
我希望ntohs(ip->ip_len)
等于header.caplen
和header.len
。但我发现ntohs(ip->ip_len) = 1280
和header.caplen = header.len = 1514
答案 0 :(得分:1)
caplen
表示可以可以捕获多少数据包,而不一定是实际捕获的数量。您需要将该值与len
字段进行比较。
如果您caplen >= len
知道您应该拥有整个数据包内容。否则,数据包捕获已被截断。