Scapy调用arping报错:引用未找到及权限不足问题求助
解决Scapy ARP扫描的核心问题及后续实现思路
1. 修复"Cannot find reference 'arping' in 'all.py'"错误
- Scapy的
arping()函数属于scapy.all模块,而非scapy.layers.l2,你之前的导入范围不对,正确导入方式:
若需要同时使用ARP、Ether类,可合并导入:from scapy.all import arpingfrom scapy.all import arping, ARP, Ether - 系统安装的
arping工具与Scapy内置的arping()函数完全独立,安装系统工具对代码引用问题无帮助,无需操作。 - 若仍存在引用问题,卸载现有Scapy后重装稳定版:
pip uninstall -y scapy pip install scapy[complete]
2. 解决PermissionError: [Errno 1] Operation not permitted错误
ARP扫描需要操作底层网络接口,必须以root权限运行脚本:
- 在Ubuntu终端直接执行:
sudo python3 your_script_name.py - PyCharm/VSCode中,可直接在终端面板输入上述sudo命令运行脚本;若要通过IDE运行按钮启动,需在运行配置中添加
sudo前缀(PyCharm:编辑运行配置→在"执行"字段前加sudo;VSCode:修改launch.json的command为sudo python3 ${file})。
实现设备日志记录与新设备告警的方案
核心流程
- 扫描网络设备:编写扫描函数获取在线设备的IP与MAC映射
from scapy.all import arping def get_online_devices(ip_range): # 静默扫描,避免冗余输出 scan_result = arping(ip_range, verbose=0) devices = {} for _, response in scan_result[0]: devices[response.psrc] = response.hwsrc return devices - 对比历史设备:
- 首次运行:将扫描结果写入日志文件(如
network_devices.log),格式可采用IP:MAC每行一条。 - 后续运行:读取日志中的历史设备列表,与当前扫描结果对比,筛选出新增设备。
- 首次运行:将扫描结果写入日志文件(如
- 触发告警:对新增设备,可通过打印提示、写入告警日志、调用邮件/推送接口等方式告警,之后更新日志文件。
- 定时扫描:使用
time.sleep()实现循环扫描,或借助Linux的cron定时任务(如每10分钟执行一次脚本)。
内容的提问来源于stack exchange,提问作者user68592
相关产品推荐
相关产品推荐

