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/TCP dump/my代码如何表示存储在转储文件中的TCP包的一部分。
第三行的第一个值80,它是32字节或8个32位(4字节)字的正确TCP数据偏移量。
但是,当(在我的代码中)在此负载上创建struct tcp_hdr(包括ip报头偏移量等)时,读取my_tcphdr->doff的结果是6(相当于24字节)。
假设从结构中读取这样的数据是不够健康的。
如何读取此4位(0xF0?)给定(称为正确的)指针:unsigned char *doff = tcp_payload+MAGIC_16

最佳答案

提取字节并将其右移4个位置。

unsigned char *doff = tcp_payload+MAGIC_16
unsigned char doffval = (*doff) >>4;

至于为什么你的结构tcp_hdr没有“工作”,你应该张贴。可能它使用了错误的结束符,或者结构被填充,因此与在线格式不匹配。

08-28 02:01
查看更多