如何使用 packETH 发送 TCP 数据包?

如何使用 packETH 发送 TCP 数据包?

我想127.0.0.1:11311用packETH发送数据包。但是有些问题我无法解决。

以下是一些截图:(点击放大)

在此处输入图片描述

在此处输入图片描述


  1. 在 IPv4 数据中(“标头长度”)

    我要发送的数据包的标头长度为 20。但是“标头长度”仅接受一位数字。我该如何解决此类问题?

  2. 我想要发送的数据包没有指定“TOS”(在 IPv4 数据中)和“紧急指针”(在 TCP 数据中)

    发送 TCP 数据包时这两个参数重要吗?

  3. 在 IPv4 数据中(“选项 0x”)

    我想要发送的数据包的 TCP 数据选项是0x12。但是它一直显示错误消息:

    TCP 选项字段长度错误(长度模 8 必须为 0)

    0x12 mod 8 应该为零,我也尝试了 0x08、0x00……等等,但错误消息没有改变。

    我不知道为什么会发生这种情况,这与“标题长度”有关吗?

答案1

  1. IPv4 报头长度字段被解释为 4 个八位字节的倍数。IPv4 报头的长度几乎总是 20 个八位字节,因此该字段的值几乎总是 5。

  2. 不,TOS/DiffServ 位和紧急指针通常并不重要。

  3. 此字段正在寻找值,而不是长度。当您输入 0x12 或 0x08 或 0x00 时,您以为输入的是长度,但实际上您只是输入了一个八位字节值。1 mod 8 != 0。我猜您试图模仿的数据包中有一个 12 个八位字节的 TCP 时间戳值。另请注意,如果我没记错的话,TCP 时间戳选项需要从 TCP 标头的开头对齐到 4 字节边界,因此您可能还需要在其中放置一些八位字节 0x00“Nop”/无操作 TCP 选项,具体取决于对齐方式。

相关内容