Python 3在连线上使用“字节”。代替使用str()
,使用bytes()
。看看http://python-future.org/compatible_idioms.html#strings-and-bytes,可以很好地比较在Py3和Py2上应该做什么。
我是Python的新手,使用* scapy **库存在以下问题。在这里您可以找到完整的代码(但我认为它并不是那么重要,因为错误位于特定的行:https://github.com/AndreaNobili/replace_download/blob/master/replace_download.py)
进入Python 2项目,我有以下两行:
modified_packet = set_load(scapy_packet, "HTTP/1.1 301 Moved Permanently\nLocation: https://www.rarlab.com/rar/wrar590.exe\n\n")
# Replace the original packet payload with the packet forget by scapy:
packet.set_payload(str(modified_packet))
这是我的set_load()函数的代码:
def set_load(packet, load):
#pdb.set_trace()
print("set_load() START")
# When the victim try to download a ".exe" file he\she is redirected to this other ".exe" link:
packet[scapy.Raw].load = load
# The value of the following fields are changed because the file is changed, they will be removed and
# scapy automatically recalculate the values of these fields inserting the correct values:
del packet[scapy.IP].len
del packet[scapy.IP].chksum
del packet[scapy.TCP].chksum
return packet
所以基本上我是用scapy伪造一个数据包,最后我用Scapy伪造的有效载荷来设置原始packet变量的有效载荷。
packet变量不是scapy数据包,而是使用netfilterqueue获得的数据包packet.set_payload(str(modified_packet))
NOTE:
使用Python 2]运行我的脚本,效果很好,但是使用Python 3
,这最后一行给我以下错误:,然后设置原始netfilterqueue数据包的有效负载,但似乎期望的是bytes”] >TypeError: Argument 'payload' has incorrect type (expected bytes, got str) > /root/Documents/PycharmWS/replace_download/replace_download.py(61)process_packet() -> packet.set_payload(str(modified_packet))
所以我将scapy
数据包转换为string
如何解决此问题?我想念什么?
另一个疑问是:为什么Python 2可以正常工作?我怀疑Python 2使用的netfilterqueue依赖版本与Python 3使用的依赖版本稍有不同,在旧版本中,期望使用string
而不是bytes参数。这种推理是正确的还是我缺少什么?我是Python的新手,使用* scapy **库存在以下问题。在这里您可以找到完整的代码(但是我认为它不是那么重要,因为错误在特定的行上:...
Python 3在连线上使用“字节”。代替使用str()
,使用bytes()
。看看http://python-future.org/compatible_idioms.html#strings-and-bytes,可以很好地比较在Py3和Py2上应该做什么。
根据您的情况,只是做
packet.set_payload(bytes(modified_packet))
Python 3在连线上使用“字节”。代替使用str()
,使用bytes()
。看看http://python-future.org/compatible_idioms.html#strings-and-bytes,可以很好地比较在Py3和Py2上应该做什么。