为什么我总是需要8位对齐?

2024-06-10 21:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到以下几点。如果我写以下两个类

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
        ),
    ]

并实例化它们

^{pr2}$

调用Incorrect包的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

但它与Correct包一起工作。我认为它失败是因为Incorrect包的大小不是8的倍数,至少每次都会失败。但这有什么不好的呢?为什么要这么做?


Tags: inpybuildselfpacketlibpackagesusr