当我想分割一个TCP数据包并分别打印每个部分(eth / ip / tcp / payload)时,如何计算有效载荷的结尾?
PrintData(Buffer, iphdrlen);
PrintData(Buffer + iphdrlen, tcpheader->data_offset*4);
PrintData(Buffer + iphdrlen + tcpheader->data_offset*4, ??? );
我试过了
PrintData( Buffer + iphdrlen + tcpheader->data_offset*4, ( Size - tcpheader->data_offset*4 - iphdr->ip_header_len*4 ) );
但是所有数据包都被截断了。我在这里传递什么值?
问候
最佳答案
IP头包含IP头和有效负载大小的长度。 IP标头还包含IP标头大小字段,该字段等于32位字的数量:
PrintData(Buffer + (iphdrlen * 4) + tcpheader->data_offset * 4, iplen - (iphdrlen * 4 + tcpheader->data_offset * 4));
不知所措,您忘记将iphdrlen乘以4的偏移量
关于c - 在TCP数据包结构中计算有效负载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53806105/