1

我正在尝试使用称为用户超时的 TCP 选项构建数据包。scapy 支持这个吗?添加诸如 MSS 之类的选项似乎非常简单。这是该选项的 RFC:https ://www.rfc-editor.org/rfc/rfc5482#section-2

任何指针?

4

1 回答 1

2

该文档似乎没有解释按数字设置任意选项的任何方法。

深入研究代码,看起来TCPOptionsField.i2m您只需传递 aint而不是 a即可做到这一点str。因此,请尝试使用28您会使用的相同位置MSS。看起来您需要将选项字段的其余部分组成一个字符串——长度,然后是 UTO+粒度的高位字节,然后是低位字节。

或者只是修改代码来处理它:

我认为你想要的是 scapy/layers/inet.py 中的 TCPOptions 元组:

TCPOptions = (
          { 0 : ("EOL",None),
            ...
            28 : ("UserTimeout",!H)
            },
          { "EOL":0,
            ...
            "UserTimeout":28,
            } )

然后你可以(希望)像设置 MSS 一样设置 UTO。

无论哪种方式,您都负责在将结果作为选项值传递之前组合 1 位粒度和 15 位超时,但我认为这比将其更改为采用 bool 和 int 的元组作为选项更简单值并将其组合在 TCP 内部。

当然,除非你在两边都打了内核补丁,并确保中间网络没有任何设备可以释放或去除未知的 TCP 选项,否则无论如何它都不会很有趣。

于 2012-10-18T21:31:02.613 回答