- 论坛徽章:
- 0
|
本帖最后由 lein317 于 2017-04-13 17:10 编辑
某次抓包得到的frag_off的bit值:
00: 1, 01: 0, 02: 1, 03: 1, 04: 1, 05: 0, 06: 0, 07: 1, 08: 0, 01: 0, 10: 1, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0,
10111001 00100000
flag保留位位1,DF=0,MF=1;
既然前3位(高位前3)为标志那么不因该用作计算frag_off的值,即
11001 00100000 才是,然并卵,这样算出来的完全不对(ntohs(iph->frag_off & 0x1fff) )
符合实际的算法:
10111001 00100000
左面的101,为保留位,DF,MF
ntohs后为:
00100000 10111001
然后 &11111 11111111(0x1fff)
结果为:10111001
再<<3 = 10111001000 = 1480
也就是说标志位也是frag_off值的一部分:
ntohs的后8位10111001,第3bit为MF,分段时必须为1,那么frag_off的最小值为00100000=32;
所以,抓包得到的frag_off的低位6-8是没有实际意义的(ntohs & 0x1fff 被去掉了)!我是这么认为的——这不合理啊!
算法为:(ntohs(iph->frag_off) & 0x1fff) << 3
------------------------------
到底该怎么算?我这个算法是不是正好巧合,而不是正确算法?
|
|