我正在 ScaPy 中编写一些协议,但很难理解 len 字段的工作原理。阅读http://trac.secdev.org/scapy/wiki/LengthFields后,我的开明程度也不逊色。
显然,我们有他们所谓的“lenfield”(保存字段的长度)和“varfield”(包含实际的可变长度字段)。但是,似乎唯一可以是 varfield 的字段是 PacketLenField、StrFixedLenField 和 StrLenField。其余的田地在哪里?为什么不能有可变长度的 BitField 或 XBitField?
例如我有:
BitFieldLenField('lenfield', None, 8, length_of='varfield')
这正确返回了 8 的长度(在这种情况下我想要的字段是 8 个八位字节/ 4 个十六进制对长)。到目前为止一切都很好。但是,当我尝试获取该字段时,似乎我唯一的选择是 StrLenField,它返回类似 'A\x81\x11\x11P 3'
所以,我的问题是:如何将该字段作为数据包中的实际十六进制取回?我是否缺少内置字段中的某些内容,或者我是否必须创建类似 XBitLenField 的内容?
谢谢你的帮助。