2
我在scapy中放置了一個新的協議層。我使用分組字段來表示協議內的len值對。我可以讓圖層構建一個包。 .show()
和hexdump()
按預期顯示數據包字段。然而,這是一個不同的故事。使用scapy分組域
我有類似的東西太多:如預期
p = foo()
p.fld3 = bar(val="one")
p.fld4 = bar(val="two")
p.fld5 = bar(val="three")
p.show()
和hexdump(p)
工作:
class bar(Packet):
name="Bar Packet"
fields_desc = [
FieldLenField("len", None, length_of="val", fmt="!H"),
StrLenField("val", "", length_from=lambda p:p.len)
]
class foo(Packet):
name="Foo Packet"
fields_desc = [
XByteField("fld1", 0x00),
XByteField("fld2", 0x00),
PacketField("fld3", '', bar),
PacketField("fld4", '', bar),
PacketField("fld5", '', bar),
XByteField("fld6", 0x00),
XByteField("fld7", 0x00)
]
如果你建造一個數據包本身。
但是,p.show2()
建立數據包很好,但未能剖析數據包字符串。字段1 - 3按預期分解(fld3.len
甚至得到正確計算)。解剖停在這裏。剩餘的字節變成fld3的原始有效載荷,並且字段4-7無法獲得。
我試過bind_layers(foo, bar)
並得到相同的結果。基於在這裏閱讀,在scapy文檔和各種scapy協議文件中,我認爲需要在bar.post_dissect()
中完成,但我不確定是什麼。
我如何獲得bar
將剩餘的原始有效載荷放回到foo
進一步解剖?
完成有什麼毛病'FieldLenField'和'StrLenField'。 'Packet'' bar'的目標是什麼? – StephenG
'bar'只是len:value對。在上面的例子中,我的foo包中有不止一個。但是有一個用例提供列表並提供多種顯示格式。在短期內,我只用了foo {bar1_len,bar1_val,bar2_len,bar2_val,... etc}。但正在尋找一些對未來使用更靈活的東西。 –