使用 pcap 模板时出现 Ipv6Packet 错误

Ipv6Packet error when using pcap template

正在尝试在 python 中使用 Kaitai 结构读取 pcap。

我已经从 pcap.ksy 文件

创建了 python 文件
$ ./bin/kaitai-struct-compiler -t python  --outdir xx formats/network/pcap.ksy 
$ ls xx
ethernet_frame.py  ipv6_packet.py  __pycache__
icmp_packet.py     packet_ppi.py   tcp_segment.py
ipv4_packet.py     pcap.py         udp_datagram.py

PYTHONPATH 设置为xx 目录。现在,如果我 运行 一个简单的一行脚本来检查我是否可以加载模块

from pcap import Pcap

我收到这个错误

$ python3 try.py 
Traceback (most recent call last):
  File "try.py", line 1, in <module>
    from pcap import Pcap
  File "/spare/tmp/scratch/kaitai-struct-compiler-0.8/xx/pcap.py", line 11, in <module>
    from packet_ppi import PacketPpi
  File "/spare/tmp/scratch/kaitai-struct-compiler-0.8/xx/packet_ppi.py", line 11, in <module>
    from ethernet_frame import EthernetFrame
  File "/spare/tmp/scratch/kaitai-struct-compiler-0.8/xx/ethernet_frame.py", line 11, in <module>
    from ipv6_packet import Ipv6Packet
  File "/spare/tmp/scratch/kaitai-struct-compiler-0.8/xx/ipv6_packet.py", line 12, in <module>
    from ipv4_packet import Ipv4Packet
  File "/spare/tmp/scratch/kaitai-struct-compiler-0.8/xx/ipv4_packet.py", line 13, in <module>
    from ipv6_packet import Ipv6Packet
ImportError: cannot import name 'Ipv6Packet'

我读到的是 python 路径没问题,python 模块正在从 pacp、以太网、ipv6 到 ipv4 的链条中向下工作。然后 ipv4 尝试再次加载 ipv6 并且脚本失败。

我认为代码正在触发导入循环。

有人知道我做错了什么吗?

这是一个循环依赖问题,仅在 Python 和 it is solved with a workaround 较新的 Kaitai Struct 版本(0.9 不稳定)中出现。

请尝试更新到 KS 0.9+。