TCP/IP报头hdr长度40 -太长



我正在用Python编程一个使用原始套接字的TCP RST数据包。为此,我在RST标记中写1,在其余标记上写0,将窗口字段设置为0,将紧急字段设置为0。然后我交换源端口和目的端口。之后,我重新计算数据包大小并创建IP标头,现在具有正确的总长度IP字段。

数据包看起来很好,但这是我在tcpdump中看到的:

IP host-11-0-0-10.http > host-11-0-0-9.37516: Flags [R] [bad hdr length 40 - too long, > 20]
        0x0000:  4500 0028 9ffc 4000 4006 84ad 0b00 000a
        0x0010:  0b00 0009 0050 928c 554c 31d8 0000 0000
        0x0020:  a004 0000 f9b3 0000

据我所见,IP长度是正确的(0028 ==> 40字节==> 20字节IP和20字节TCP)。这就好像它相信整个报头是IP或TCP,但我不明白为什么。

TCP报头有问题。data offset字段(这就是RFC中所称的,但它也经常被称为header length),您已设置为10(在数据包转储中偏移量0x20处的第一个0xa0)。这是TCP报头中32位字的数量——或者TCP有效负载的偏移量。在本例中,它应该是5(20字节)。

40太长,因为IP报头已经指定了数据包的总长度,因此IP报头之后只剩下20个字节。

相关内容

最新更新