Python 为什么我总是需要八位对齐?
我注意到以下几点。如果我写以下两个类Python 为什么我总是需要八位对齐?,python,alignment,packet,scapy,Python,Alignment,Packet,Scapy,我注意到以下几点。如果我写以下两个类 from scapy.all import * class Incorrect(Packet): fields_desc=[ BitField( "X", 0, 1 ), BitField( "Y", 0, 2 ), BitField( "Z", 0, 3 ), ] cla
from scapy.all import *
class Incorrect(Packet):
fields_desc=[
BitField(
"X", 0, 1
),
BitField(
"Y", 0, 2
),
BitField(
"Z", 0, 3
),
]
class Correct(Packet):
fields_desc=[
BitField(
"X", 0, 3
),
BitField(
"Y", 0, 3
),
BitField(
"Z", 0, 2
),
]
并实例化它们
i = Incorrect()
c = Correct()
调用不正确的数据包的show2()
方法失败,它给出以下输出
WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
File "/home/lk/code/BACnetFuzzingProject/src/scapytest.py", line 32, in <module>
i.show2()
File "/usr/local/lib/python2.7/dist-packages/scapy/packet.py", line 848, in show2
self.__class__(str(self)).show()
File "/usr/local/lib/python2.7/dist-packages/scapy/packet.py", line 268, in __str__
return self.build()
File "/usr/local/lib/python2.7/dist-packages/scapy/packet.py", line 330, in build
p = self.do_build()
File "/usr/local/lib/python2.7/dist-packages/scapy/packet.py", line 323, in do_build
p = self.post_build(pkt,pay)
File "/usr/local/lib/python2.7/dist-packages/scapy/packet.py", line 337, in post_build
return pkt+pay
TypeError: can only concatenate tuple (not "str") to tuple
警告:未找到IPv6目标的路由::(没有默认路由?)
回溯(最近一次呼叫最后一次):
文件“/home/lk/code/BACnetFuzzingProject/src/scapytest.py”,第32行,在
i、 show2()
文件“/usr/local/lib/python2.7/dist packages/scapy/packet.py”,第848行,如图2所示
self.\uuuu类\uuuuu(str(self)).show()
文件“/usr/local/lib/python2.7/dist packages/scapy/packet.py”,第268行,在__
返回self.build()
文件“/usr/local/lib/python2.7/dist-packages/scapy/packet.py”,第330行,内部版本
p=self.do_build()
文件“/usr/local/lib/python2.7/dist packages/scapy/packet.py”,第323行,在do_build中
p=自组装(组装、付款)
文件“/usr/local/lib/python2.7/dist packages/scapy/packet.py”,第337行,在后期构建中
返回pkt+支付
TypeError:只能将元组(而不是“str”)连接到元组
但它与正确的
数据包一起工作。我认为它失败是因为不正确的
数据包的大小不是8的倍数,至少每次都会失败。但这有什么不好呢?为什么需要?s请使用struct.pack()和struct.unpack()来构建和解析需要对齐的数据包,我想这就是原因所在