00000 45 00 02 87 8a 97 40 00 40 06 af d7 7f 00 00 01 E.....@.@.......
00016 7f 00 00 01 e0 56 00 50 0d 46 70 a8 0c e2 41 70 .....V.P.Fp...Ap
00032 80 18 01 01 b9 70 00 00 01 01 08 0a 00 64 fa 32 .....p.......d.2
这是Wireshark / tcpdump / my代码如何表示存储在转储文件中的TCP数据包的一部分。
第三行的第一个值80
,它是一个正确的32字节TCP数据偏移量,或8个32位(4字节)字。
然而,当(在我的代码中),struct tcp_hdr是在这个有效负载上创建的(包括ip头偏移等),读取my_tcphdr->doff
的结果是6,(相当于24个字节)。
假设以某种方式从结构中读取这些数据是不够健康的。
如果指定(称为正确)指针,我如何将这个4位(0xF0?)值读取到某个int:unsigned char *doff = tcp_payload+MAGIC_16
?
答案 0 :(得分:3)
您将提取字节并将其向右移动4个位置。
unsigned char *doff = tcp_payload+MAGIC_16
unsigned char doffval = (*doff) >>4;
至于为什么你的struct tcp_hdr没有“工作”,你应该发布它。也许它使用了错误的endian,或者struct get padded因此它与on wire格式不匹配。