【问题标题】:TCP/IP header bad hdr length 40 - too longTCP/IP 标头错误 hdr 长度 40 - 太长
【发布时间】:2016-08-18 23:38:57
【问题描述】:

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

pacekts 看起来不错,但这是我在 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,但我不明白为什么。

【问题讨论】:

    标签: python sockets


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多