Я пишу некоторые протоколы в ScaPy, но мне трудно понять, как работают поля len. Прочитав http://trac.secdev.org/scapy/wiki/LengthFields, я м не менее просвещен.
Очевидно, у нас есть то, что они называют «lenfield» (содержит длину поля) и «varfield» (содержит фактическое поле переменной длины). Однако кажется, что единственными полями, которые могут быть varfields, являются PacketLenField, StrFixedLenField и StrLenField. Где остальные поля? Почему вы не можете иметь переменную длину BitField или XBitField?
Например, у меня есть:
BitFieldLenField('lenfield', None, 8, length_of='varfield')
Это правильно возвращает длину 8 (поле, которое я хочу в этом случае, имеет длину 8 октетов/4 шестнадцатеричных пары). Пока все хорошо. Однако, когда я пытаюсь получить это поле, кажется, что мой единственный вариант - это StrLenField, который возвращает что-то вроде "A\x81\x11\x11P 3"
Итак, мой вопрос: как мне вернуть это поле как фактическое шестнадцатеричное значение в пакете? Я что-то упустил во встроенных полях или мне нужно создать что-то вроде XBitLenField?
Спасибо за вашу помощь.