TCP / IP头坏了hdr长度40 - 太长了

时间:2016-08-18 14:27:15

标签: python sockets

我使用原始套接字在Python中编写TCP RST数据包。为此,我在RST标志中写入1,在其余标志上写入0,将windows字段设置为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,但我不明白为什么。

1 个答案:

答案 0 :(得分:1)

问题出在TCP标头中。 data offset字段(它在RFC中调用的内容,但它通常也称为header length),您已设置为10(0xa0的第一个半字节)在数据包转储中的偏移量0x20处)。这是TCP标头中32位字的数量 - 或TCP有效负载的偏移量。在这种情况下,它应该是5(20字节)。

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