PyPCAPKit icon indicating copy to clipboard operation
PyPCAPKit copied to clipboard

PCAP-NG: [pack_flags] option must be in Packet Block, but found in 168627466 block.

Open dnesting opened this issue 8 months ago • 1 comments

Wireshark-generated PCAP-NG files cannot be parsed.

  • OS Version: MacOS Sequoia 15.4.1 (24E263)
  • Python Version: Python 3.12.2 (main, Feb 23 2024, 13:29:13) [Clang 15.0.0 (clang-1500.1.0.2.5)]
  • pypcapkit: 1.3.5.post16
  • Wireshark: Version 4.4.6 (v4.4.6-0-gaebb20483889)
from pcapkit import IP, extract

extraction = extract(fin="in.pcapng", nofile=True)
frame0 = extraction.frame[0]
# check if IP (IPv4 or IPv6) in this frame
if IP in frame0:
    # fetch the IP packet from this frame
    ip = frame0[IP]
    print(ip)

Output:

[CRITICAL] 05/11/2025 11:06:11 AM - ProtocolError: PCAP-NG: [pack_flags] option must be in Packet Block, but found in 168627466 block.
pcapkit.utilities.exceptions.ProtocolError: PCAP-NG: [pack_flags] option must be in Packet Block, but found in 168627466 block.

This happens with all PCAP-NG files I try, but here's a simple test case file:

in.pcapng.zip

dnesting avatar May 11 '25 15:05 dnesting

Running with PCAPKIT_DEVMODE:

project/venv/lib/python3.12/site-packages/pcapkit/__init__.py:0: DevModeWarning: development mode enabled
  PCAPKIT_DEVMODE=true
[CRITICAL] 05/11/2025 11:03:03 AM - ProtocolError: PCAP-NG: [pack_flags] option must be in Packet Block, but found in 168627466 block.
Traceback (most recent call last):
  File "project/test.py", line 3, in <module>
    extraction = extract(fin="in.pcapng", nofile=True)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/interface/core.py", line 122, in extract
    return Extractor(fin=fin, fout=fout, format=format,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/foundation/extraction.py", line 825, in __init__
    self.run()    # start extraction
    ^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/foundation/extraction.py", line 456, in run
    self._exeng.run()
  File "project/venv/lib/python3.12/site-packages/pcapkit/foundation/engines/pcapng.py", line 135, in run
    shb = P_PCAPNG(ext._ifile, num=0, sct=1, ctx=None)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/protocol.py", line 521, in __init__
    self.__post_init__(file, length, **kwargs)  # type: ignore[arg-type]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 1046, in __post_init__
    self._info = self.unpack(length, _read=_read, _seek_set=_seek_set, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 866, in unpack
    data = self.read(length, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 918, in read
    block = meth(schema.block, header=schema)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 1435, in _read_block_shb
    options=self._read_pcapng_options(schema.options),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 1935, in _read_pcapng_options
    data = meth(schema, options=options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "project/venv/lib/python3.12/site-packages/pcapkit/protocols/misc/pcapng.py", line 2950, in _read_option_pack_flags
    raise ProtocolError(f'PCAP-NG: [pack_flags] option must be in Packet Block, '
pcapkit.utilities.exceptions.ProtocolError: PCAP-NG: [pack_flags] option must be in Packet Block, but found in 168627466 block.

dnesting avatar May 11 '25 15:05 dnesting