“安装”Kaitai Struct Python

时间:2018-01-19 15:11:49

标签: python-3.x parsing networking network-protocols kaitai-struct

我需要帮助在笔记本电脑上安装Kaitai Struct。

我安装了python-kaitaistruct并编译了网络文件。

但我收到导入错误:

from ethernet_frame import *
import socket

s = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.ntohs(3))

def network(buf):
    io = BytesIO(buf)
    ksio = KaitaiStream(io)
    pkt = EthernetFrame(ksio)
    dummy = pkt.ipv4_body.src_ip_addr
    print(dummy)

while True:
    p = s.recvfrom(65565)
    network(p) 

我的文件夹如下所示:

@if (session('errors')->has('email'))
 has-error
@endif

和我执行的文件:

@hasError('email')
 has-error
@endhasError

有人可以帮助我,也许我安装错了吗? 或者完整指南如何安装和使用它会很酷:DD

谢谢你< 3

2 个答案:

答案 0 :(得分:0)

我相信你应该把Kaitai Struct为你生成的文件放在Python找到它的地方。到目前为止,最简单的解决方案可能就是将其保留在当前目录中并使用以下内容启动test2.py

PYTHONPATH=. python ./test2.py

或者,如果要将所有内容保存在同一目录中,则较新的编译器允许您指定--python-package .来生成在当前目录中搜索内容的包导入。

答案 1 :(得分:0)

我有一个类似的问题,在检查了由编译器创建的.py文件后,我发现编辑导入顺序解决了该问题。示例:

import ipv4_packet导致了与您相同的错误。

我检查了ipv4_packet.py,它有一个导入语句from ipv6_packet import Ipv6Packet

        # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild

from pkg_resources import parse_version
from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO
from enum import Enum


if parse_version(ks_version) < parse_version('0.7'):
    raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version))

from udp_datagram import UdpDatagram
from tcp_segment import TcpSegment
from ipv6_packet import Ipv6Packet
from icmp_packet import IcmpPacket

class Ipv4Packet(KaitaiStruct):

    class ProtocolEnum(Enum):

ipv6_packet依次尝试从ipv4_packet:from ipv4_packet import Ipv4Packet导入类,并导致导入错误。如果行(ipv4_packet .py):

from udp_datagram import UdpDatagram
from tcp_segment import TcpSegment
from ipv6_packet import Ipv6Packet
from icmp_packet import IcmpPacket

移到类定义后没有错误。

今天早上第一次与Kaitai Struct一起玩时,我确定这不需要手动完成,并且我/我们正在执行的编译中存在问题,但是如果您只想拥有一个,它会起作用快速播放。