使用原始层和简单地将字符串附加到数据包之间有什么区别吗?

Is there any difference between using a Raw layer, and simply attaching a string to a packet?

显式使用 Raw 和简单地使用 string/bytes 对象之间有什么区别吗?或者换句话说,这两行之间有什么区别吗?

p1 = ARP(pdst="192.168.72.102") / "Some Test Data"
p2 = ARP(pdst="192.168.72.102") / Raw(load="Some Test Data")

在 Wireshark 中检查结果和查看生成的 scapy 数据包对象时,它们的行为似乎相同,但我想确定一下。

假设 conf.raw_layer 没有改变,它们是一样的。

如果您检查 Packet.__div__ 的实现(/;用于将层“粘合”在一起的分隔符),当 strbytes 给出对象:

def __div__(自己,其他):
    如果是实例(其他,数据包):
        克隆A = self.copy()
        克隆 B = other.copy()
        cloneA.add_payload(克隆B)
        return克隆A
    <b>elif isinstance(other, (bytes, str)):
        return 自己 / conf.raw_layer(负载=其他)</b>
    别的:
        return other.__rdiv__(自己)

conf.raw_layer后来定义为conf.raw_layer = Raw