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

如何在Linux中运行Scapy Python脚本?脚本无输出问题排查求助

Scapy脚本无输出的排查与解决

可能的问题及解决方法:

  • 网卡名称错误:脚本中指定的iface='br-xxx'是占位符,并非真实网卡名。运行ip link show(Linux)或Get-NetAdapter(Windows PowerShell)查看系统真实网卡名称,替换成正确值(如eth0、enp0s3)。

  • 无符合过滤条件的流量:脚本仅捕获源IP为10.10.10.10的ICMP包,需确保当前环境有该IP发出的ICMP流量。可手动从该IP发起ping请求,或用tcpdump icmp and src host 10.10.10.10验证是否存在目标流量。

  • 权限不足:Scapy抓包需要管理员/root权限。Linux下运行脚本需加sudo(如sudo python3 your_script.py),Windows需以管理员身份打开终端执行脚本。

  • 数据包处理逻辑缺陷:

    • 交换IP后未重新计算校验和:修改IP和负载后,原校验和失效,可能导致发送的包被丢弃。可手动删除校验和字段,让Scapy自动重新计算:
      del pkt_ld[IP].chksum
      del pkt_ld[ICMP].chksum
      
    • 无调试输出:在处理函数内添加打印语句,确认是否捕获到目标包,比如:
      print("捕获到目标ICMP包")
      
  • 环境或版本问题:确保安装最新版Scapy,执行pip install --upgrade scapy更新;部分环境需用python3替代python运行脚本。

修改后的参考脚本

#!/usr/bin/python3
from scapy.all import *

def modify_packet_contents_ld(pkt_ld):
    if ICMP in pkt_ld and pkt_ld[IP].src == '10.10.10.10':
        print("捕获到目标数据包,开始处理")
        # 交换源目IP地址
        pkt_ld[IP].src, pkt_ld[IP].dst = pkt_ld[IP].dst, pkt_ld[IP].src
        # 修改ICMP负载内容
        pkt_ld[ICMP].load = b"hello-world"
        # 删除旧校验和,让Scapy自动重新计算
        del pkt_ld[IP].chksum
        del pkt_ld[ICMP].chksum
        # 发送数据包并显示详细信息
        send(pkt_ld, verbose=True)

def sniff_packet_ld():
    # 替换为你的真实网卡名称
    sniff(filter='icmp and src host 10.10.10.10', prn=modify_packet_contents_ld, iface='eth0')

sniff_packet_ld()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:29