使用原始层和简单地将字符串附加到数据包之间有什么区别吗?
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__
的实现(/
;用于将层“粘合”在一起的分隔符),当 str
或bytes
给出对象:
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
显式使用 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__
的实现(/
;用于将层“粘合”在一起的分隔符),当 str
或bytes
给出对象:
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