scapyでレイヤーを構築しています。このレイヤーには ConditionalFields があります。
class Foo(Packet):
name = "Foo"
fields_desc = [
ConditionalField(BitField("bar1", None, 4),
lambda pkt: pkt.bar1 is not None),
ConditionalField(BitField("bar2", None, 4),
lambda pkt: pkt.bar2 is not None),
ByteField("bar3", 0x0),
ByteField("bar4", 0x0)
]
bar1 が設定されているかどうかを確認するにはどうすればよいですか? それぞれ バー2? 私が書いたラムダ関数は私には正しいように見えます。ドキュメントによると、そのように使用されていますが、機能していません。どうすればこれを修正できるか分かりますか? アイデアは、クラス Foo をインスタンス化するときにbar1
とが設定されている場合は、パケットに存在する必要があり、そうでない場合は存在しないということです。bar2
そのためだけに 2 つのパケットを実行したくありません。