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

Scapy发送原始以太网帧无法在Wireshark显示问题求助

问题分析与解决办法

你遇到的这种情况,主要有几个常见原因,对应解决办法如下:

1. 构造的以太网帧不符合规范,被网卡/内核丢弃

你当前只构造了一个包含目标MAC的空Ether帧,没有以太网类型字段(比如IPv4的0x0800、ARP的0x0806),也没有任何负载数据。很多网卡驱动或内核网络栈会直接丢弃这种不符合规范的“空帧”,哪怕Scapy显示发送成功。

解决办法:给帧添加协议类型或负载,比如:

from scapy.all import *

# 加上IPv4协议类型和测试负载
g = Ether(dst=get_if_hwaddr("enp0s31f6"), type=0x0800) / IP(dst="127.0.0.1") / "test frame"
sendp(g, iface="enp0s31f6")

哪怕只加个类型字段,也能让网卡认为这是合法帧:

g = Ether(dst=get_if_hwaddr("enp0s31f6"), type=0x0806)  # ARP类型
sendp(g, iface="enp0s31f6")

2. 目标MAC是自身接口MAC,被环回过滤拦截

当你把帧发往自身接口的MAC时,部分网卡的环回过滤机制会直接在内核层面处理这个帧,不会把它放到抓包工具能捕获的链路中,所以Wireshark/tcpdump看不到。

解决办法:换一个目标MAC测试,比如同网段其他设备的MAC,或者广播MAC:

g = Ether(dst="ff:ff:ff:ff:ff:ff", type=0x0800) / IP(dst="192.168.1.255") / "broadcast test"
sendp(g, iface="enp0s31f6")

3. 网卡优化功能干扰帧的发送或捕获

部分网卡的硬件卸载功能(如TCP分段卸载TSO、校验和卸载)可能会干扰原始二层帧的发送,或者抓包工具无法捕获被硬件修改后的帧。

解决办法:

  • 临时关闭网卡的相关优化:
    sudo ethtool -K enp0s31f6 tso off tx-checksum-ip-generic off
    
  • 将网卡设置为混杂模式,确保能捕获所有帧:
    sudo ip link set enp0s31f6 promisc on
    

4. 抓包工具的配置问题

确保抓包时指定了正确的接口,并且用root权限运行(否则可能捕获不到原始帧):

# tcpdump指定接口并显示二层信息
sudo tcpdump -i enp0s31f6 -e -vvv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:32