当我想分割一个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/

10-11 15:31