我想127.0.0.1:11311
用packETH发送数据包。但是有些问题我无法解决。
以下是一些截图:(点击放大)
在 IPv4 数据中(“标头长度”)
我要发送的数据包的标头长度为 20。但是“标头长度”仅接受一位数字。我该如何解决此类问题?
我想要发送的数据包没有指定“TOS”(在 IPv4 数据中)和“紧急指针”(在 TCP 数据中)
发送 TCP 数据包时这两个参数重要吗?
在 IPv4 数据中(“选项 0x”)
我想要发送的数据包的 TCP 数据选项是
0x12
。但是它一直显示错误消息:TCP 选项字段长度错误(长度模 8 必须为 0)
0x12 mod 8 应该为零,我也尝试了 0x08、0x00……等等,但错误消息没有改变。
我不知道为什么会发生这种情况,这与“标题长度”有关吗?
答案1
IPv4 报头长度字段被解释为 4 个八位字节的倍数。IPv4 报头的长度几乎总是 20 个八位字节,因此该字段的值几乎总是 5。
不,TOS/DiffServ 位和紧急指针通常并不重要。
此字段正在寻找值,而不是长度。当您输入 0x12 或 0x08 或 0x00 时,您以为输入的是长度,但实际上您只是输入了一个八位字节值。1 mod 8 != 0。我猜您试图模仿的数据包中有一个 12 个八位字节的 TCP 时间戳值。另请注意,如果我没记错的话,TCP 时间戳选项需要从 TCP 标头的开头对齐到 4 字节边界,因此您可能还需要在其中放置一些八位字节 0x00“Nop”/无操作 TCP 选项,具体取决于对齐方式。