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

Scapy报错:Maximum recursion depth exceeded 问题解决咨询

局域网广播扫描Scapy递归深度超限问题解决

问题描述

使用Scapy在局域网内发送广播报文获取设备IP与MAC地址,代码如下:

broadcast.dst = 'ff:ff:ff:ff:ff:ff'
# Stores the IP address and MAC address of the scanned target
request_broadcast = broadcast / request
clients = srp(request_broadcast, timeout = 1)[0]
clientInfo = dict()
for element in clients:
   print(element[1].psrc + "      " + element[1].hwsrc)
   clientInfo[element[1].psrc] = element[1].hwsrc

运行时偶尔出现以下报错:

WARNING: Socket <scapy.arch.bpf.supersocket.L2bpfSocket object at 0x103048d10> failed with 'maximum recursion depth exceeded'. It was closed.
WARNING:scapy.runtime:Socket <scapy.arch.bpf.supersocket.L2bpfSocket object at 0x103048d10> failed with 'maximum recursion depth exceeded'. It was closed.

解决方法

  • 调整Python递归深度限制:在代码开头导入sys模块并提升递归层数,示例:
    import sys
    sys.setrecursionlimit(10000)
    
    数值可根据实际情况调整,避免设置过大引发内存异常。
  • 显式指定网卡:调用srp方法时通过iface参数指定具体网卡,避免Scapy自动识别网卡过程中触发递归问题,示例:
    clients = srp(request_broadcast, timeout=1, iface="en0")[0]
    
    替换en0为你的实际网卡名称(可通过scapy.get_if_list()获取所有网卡)。
  • 升级Scapy版本:该报错可能是旧版本Scapy的已知BUG,执行以下命令升级到最新稳定版:
    pip install --upgrade scapy
    
  • 优化扫描参数:适当增大timeout值(比如设为2),给设备响应留足时间,减少短时间内大量响应处理带来的递归调用压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:50:33