Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我总是需要八位对齐?_Python_Alignment_Packet_Scapy - Fatal编程技术网

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()来构建和解析需要对齐的数据包,我想这就是原因所在