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

Scapy调用arping报错:引用未找到及权限不足问题求助

解决Scapy ARP扫描的核心问题及后续实现思路

1. 修复"Cannot find reference 'arping' in 'all.py'"错误

  • Scapy的arping()函数属于scapy.all模块,而非scapy.layers.l2,你之前的导入范围不对,正确导入方式:
    from scapy.all import arping
    
    若需要同时使用ARP、Ether类,可合并导入:
    from 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})。

实现设备日志记录与新设备告警的方案

核心流程

  1. 扫描网络设备:编写扫描函数获取在线设备的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
    
  2. 对比历史设备:
    • 首次运行:将扫描结果写入日志文件(如network_devices.log),格式可采用IP:MAC每行一条。
    • 后续运行:读取日志中的历史设备列表,与当前扫描结果对比,筛选出新增设备。
  3. 触发告警:对新增设备,可通过打印提示、写入告警日志、调用邮件/推送接口等方式告警,之后更新日志文件。
  4. 定时扫描:使用time.sleep()实现循环扫描,或借助Linux的cron定时任务(如每10分钟执行一次脚本)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:24