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
相关产品推荐
相关产品推荐

