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
答案 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)