4
我試圖用scapy添加一個新的協議,並且遇到了構建存儲其他BitEnumField「數據包」的數據包時出現困難的問題,該數據包位於一個字節的長度下。我想知道是否有一個解決方法,使其工作(沒有捆綁到全字節字段的數據包)。這裏是例子:使用短於8位的PacketField構建scapy數據包
from scapy.packet import Packet
from scapy.fields import *
class Status(Packet):
name = '4 bit status'
fields_desc = [
BitEnumField('a', 0, 1, {0:'Disabled', 1:'Enabled'}),
BitEnumField('b', 0, 1, {0:'Disabled', 1:'Active'}),
BitEnumField('c', 0, 1, {0:'Disabled', 1:'Active'}),
BitEnumField('d', 0, 1, {0:'Disabled', 1:'Active'}),
]
#this is added for debug purposes only
def post_build(self, pkt,pay):
print "pkt:", pkt, "type:", type(pkt)
return pkt+pay
現在,我可以理解爲什麼Status().show2()
失敗pkt
僅有4位。但是這一個死過(我猜是因爲每個數據包是獨立形成):
class TotalStatus(Packet):
name = "8 bit status"
fields_desc = [
PacketField('axis0', Status(), Status),
PacketField('axis1', Status(), Status),
]
TotalStatus().show2()
給你漫長的回溯,在self.post_build()
無法貓pkt
元組和有效載荷的其餘部分,裏面是空的字符串結束。 I.e .: >>> TypeError: can only concatenate tuple (not "str") to tuple
有沒有辦法避免將位字段綁定到完整字節?
是你的目標,不發送沿着這些線路全部字節或東西嗎? – synthesizerpatel
不,目標始終是發送完整字節,類似於具有比字節更短的複雜字段的「TotalStatus」類型的數據包。 – Oleksiy