You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scapy伪造报文报错:AttributeError: 'bytearray'对象无__rdiv__属性

问题解答

1. 修复 AttributeError: 'bytearray' object has no attribute '__rdiv__' 错误

你碰到的这个报错,本质是Scapy的/分层操作符不支持直接处理bytearray类型。Scapy的分层语法(IP()/TCP()/载荷)要求末尾的载荷必须是**字节串(bytes)**或者Scapy可识别的协议层对象,bytearray不在这个范围内。

给你两个简单的修复方案:

  • 直接把bytearray转换成bytes类型,用bytes(b)即可
  • 用Scapy的Raw()层包裹字节数据,这是更贴合Scapy规范的做法

修改后的代码示例:

b = bytearray([0xff, 0xff])
def spoof(src_ip, src_port, dest_ip, dest_port):
    global b
    # 方案1:转成bytes直接作为载荷
    spoofed_packet = IP(src=src_ip, dst=dest_ip) / TCP(sport=src_port, dport=dest_port) / bytes(b)
    # 方案2:用Raw层封装载荷(更推荐)
    # spoofed_packet = IP(src=src_ip, dst=dest_ip) / TCP(sport=src_port, dport=dest_port) / Raw(load=bytes(b))
    send(spoofed_packet)

StackOverflow上的示例没用到bytearray,就是因为大多会直接用bytes或Raw()传递载荷,避开类型兼容问题。

2. 解决Scapy频繁弹出PowerShell的问题

在Windows环境下,Scapy默认的send()函数会调用系统PowerShell执行发包命令,这就是弹窗的原因。你可以通过修改Scapy的套接字配置,强制它用原始套接字直接发包,跳过外部命令调用:

在代码开头添加以下配置:

from scapy.all import conf, L3RawSocket
conf.L3socket = L3RawSocket

这样修改后,send()会直接通过原始套接字发送三层报文,不会再弹出PowerShell窗口。另外如果是发送二层以太网帧,记得用sendp()替代send(),也能避免这类外部调用问题。


内容的提问来源于stack exchange,提问作者Ayy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:28