Scapy欺骗UDP数据包错误

时间:2018-04-03 00:20:35

标签: python

AttributeError: 'bytearray' object has no attribute '__rdiv__'

我得到以下代码:

b = bytearray([0xff, 0xff])

def spoof(src_ip, src_port, dest_ip, dest_port):
    global b
    spoofed_packet = IP(src=src_ip, dst=dest_ip) / TCP(sport=src_port, dport=dest_port) / b
    send(spoofed_packet)

发现在stackoverflow上欺骗数据包的例子,但它没有使用bytearray,我假设我需要将bytearray转换为字符串?

此外,我的scapy一直在打开powershell吗?

我通过将bytearray变为字符串来修复该错误,现在我收到以下错误:

    os.write(1,b".")
    OSError: [Errno 9] Bad file descriptor

3 个答案:

答案 0 :(得分:1)

Bytearray对象无法转换为Packet对象(因此,Scapy无法发送它们,这解释了'bytearray' object has no attribute '__rdiv__'错误)。您需要转换b,使用str()(如果您使用的是2.4.0之前的Scapy,使用Python 2),或raw()(使用Scapy 2.4.0及更高版本,使用Python 2或3)。

我强烈建议您升级到Scapy 2.4.0。这应该可以修复Bad file descriptor错误和Powershell窗口。

例如,您的代码为raw()(如果您使用的是Scapy< 2.4.0,请替换为str()

b = bytearray([0xff, 0xff])

def spoof(src_ip, src_port, dest_ip, dest_port):
    global b
    spoofed_packet = IP(src=src_ip, dst=dest_ip) / TCP(sport=src_port, dport=dest_port) / raw(b)
    send(spoofed_packet)

如果您不 使用bytearray对象,您也可以直接使用bytes / str对象:

b = b"\xff\xff"

def spoof(src_ip, src_port, dest_ip, dest_port):
    global b
    spoofed_packet = IP(src=src_ip, dst=dest_ip) / TCP(sport=src_port, dport=dest_port) / b
    send(spoofed_packet)

答案 1 :(得分:0)

或许可以使用您正在使用的Python版本吗?

看起来__rdiv__运算符可能已在python3中折旧了?

请参阅以下SO问题:

Have the `__rdiv__()` and `__idiv__` operators changed in Python 3.x?

答案 2 :(得分:0)

您可以使用以下代码

from scapy.all import IP, UDP, L3RawSocket, conf
from scapy.all import send as scapy_send


def send(dest_ip, port, src_ip, payload, count=1):
    if dest_ip in ("127.0.0.1", "localhost"):
        conf.L3socket = L3RawSocket
    ip = IP(dst=dest_ip, src=src_ip)
    udp = UDP(dport=port)
    scapy_send(ip/udp/str(payload), count=count)


send("192.168.1.100", 9090, "192.168.33.100", "Tarun here", 2)

UDP Packet sending