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

为何Scapy的bind_layers无法识别自定义IEEE1722协议层?

解决Scapy自定义IEEE1722协议无法解析的问题

问题原因

你定义的IEEE1722协议字段总位数不是8的整数倍:subtype(8位) + header_specific(1位) + version(3位) = 12位,也就是1.5字节。Scapy无法正确处理非字节对齐的字段组合,导致协议绑定未生效,数据仍被识别为Raw层。

修复方案

IEEE 1722协议的第二个字节实际包含4个保留位(或其他标准定义字段),需要补充完整至8位,让字段总长度为2字节(16位)。修改后的代码如下:

from scapy.all import *

class IEEE1722(Packet):
    name = "ieee1722"
    fields_desc = [
        BitField("subtype", 0, 8),
        BitField("header_specific", 0, 1),
        BitField("version", 0, 3),
        BitField("reserved", 0, 4),  # 补充4位保留位,凑齐第二个字节的8位
        Raw("payload")
    ]

bind_layers(Ether, IEEE1722, type=0x22f0)

验证结果

修改后重新解析数据包,packet.haslayer(IEEE1722)会返回True,packet.show()也会正确显示ieee1722层:

###[ Ethernet ]### 
  dst       = 91:e0:f0:01:00:00
  src       = 00:fc:70:00:00:02
  type      = 0x22f0
###[ ieee1722 ]### 
  subtype      = 0
  header_specific= 0
  version      = 0
  reserved     = 0
###[ Raw ]### 
......

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:55:17