检查tcp校验和
我有以下数据包(十六进制): 其中我已识别出IP头:检查tcp校验和,tcp,checksum,Tcp,Checksum,我有以下数据包(十六进制): 其中我已识别出IP头: 45 00 00 2C 14 3C 40 00 80 06 63 39 C0 A8 01 02 C0 A8 01 04 TCP标头: 11 EF 00 7C 4F BF BB FE 18 DF 7A 77 50 18 00 40 02 41 00 00 数据呢 78 70 00 01 我正在验证校验和。为此,我对TCP头中的所有字段进行了汇总,除了校验和字段,它给出了201D6 然后,我将数据字节相加,这将添加到7871 然后,我将计算
45 00 00 2C
14 3C 40 00
80 06 63 39
C0 A8 01 02
C0 A8 01 04
TCP标头:
11 EF 00 7C
4F BF BB FE
18 DF 7A 77
50 18 00 40
02 41 00 00
数据呢
78 70 00 01
我正在验证校验和。为此,我对TCP头中的所有字段进行了汇总,除了校验和字段,它给出了201D6
然后,我将数据字节相加,这将添加到7871
然后,我将计算出的TCP长度(24)添加到协议中,并添加IP源地址和目标地址;总计:18380
将最后三个标记的量与其3FDC7
相加,并将最有价值的数字与数字的其余部分相加,即FDCA
,计算其一个补码时,该数字变为0235
。然而,这与原始数据包的校验和不同
我在哪里把事情搞砸了?计算中有两个错误: 第一个是简单的,TCP长度加起来是24,但是长度必须是十六进制的,所以它是
0x0018
第二个更为棘手,报告说:
校验和字段是one的16位one的补码
标题和文本中所有16位字的补码和
因此,它不仅是一个16位单词的简单和,而且是一个一个人的补码和,这解释了它是如何工作的:
用于不带校验和的TCP标头0x01D8
- 数据的
0x7871
用于伪标头0x8375
用于TCP长度0x0018
- IP src的
0xC0A0102
用于IP dstC0A80104
- 协议的
0x0006
78 70 00 01