pypcapkit 1.3.1.post7__pp39-none-any.whl → 1.3.1.post8__pp39-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. pcapkit/__init__.py +1 -1
  2. pcapkit/const/reg/apptype.py +3 -3
  3. pcapkit/corekit/infoclass.py +2 -0
  4. pcapkit/dumpkit/pcap.py +13 -5
  5. pcapkit/protocols/data/application/ftp.py +2 -2
  6. pcapkit/protocols/data/application/httpv1.py +2 -1
  7. pcapkit/protocols/data/application/httpv2.py +2 -1
  8. pcapkit/protocols/data/internet/ah.py +2 -2
  9. pcapkit/protocols/data/internet/hip.py +2 -1
  10. pcapkit/protocols/data/internet/hopopt.py +2 -1
  11. pcapkit/protocols/data/internet/ipv4.py +2 -1
  12. pcapkit/protocols/data/internet/ipv6.py +2 -2
  13. pcapkit/protocols/data/internet/ipv6_frag.py +2 -2
  14. pcapkit/protocols/data/internet/ipv6_opts.py +2 -1
  15. pcapkit/protocols/data/internet/ipv6_route.py +2 -2
  16. pcapkit/protocols/data/internet/ipx.py +2 -1
  17. pcapkit/protocols/data/internet/mh.py +2 -1
  18. pcapkit/protocols/data/link/arp.py +2 -1
  19. pcapkit/protocols/data/link/ethernet.py +2 -1
  20. pcapkit/protocols/data/link/l2tp.py +4 -2
  21. pcapkit/protocols/data/link/ospf.py +4 -2
  22. pcapkit/protocols/data/link/vlan.py +2 -1
  23. pcapkit/protocols/data/misc/null.py +2 -2
  24. pcapkit/protocols/data/misc/pcap/frame.py +4 -2
  25. pcapkit/protocols/data/misc/pcap/header.py +2 -1
  26. pcapkit/protocols/data/misc/pcapng.py +16 -8
  27. pcapkit/protocols/data/misc/raw.py +3 -5
  28. pcapkit/protocols/data/protocol.py +8 -0
  29. pcapkit/protocols/data/transport/tcp.py +6 -3
  30. pcapkit/protocols/data/transport/udp.py +2 -2
  31. pcapkit/protocols/internet/internet.py +1 -1
  32. pcapkit/protocols/link/link.py +1 -1
  33. pcapkit/protocols/misc/pcap/frame.py +1 -1
  34. pcapkit/protocols/misc/pcapng.py +5 -2
  35. pcapkit/protocols/misc/raw.py +0 -1
  36. pcapkit/protocols/protocol.py +4 -1
  37. pcapkit/protocols/schema/__init__.py +0 -1
  38. pcapkit/protocols/schema/schema.py +1 -1
  39. pcapkit/protocols/transport/tcp.py +1 -1
  40. pcapkit/protocols/transport/udp.py +1 -1
  41. pcapkit/toolkit/pcapng.py +1 -1
  42. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/METADATA +1 -1
  43. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/RECORD +47 -47
  44. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/WHEEL +1 -1
  45. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/LICENSE +0 -0
  46. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/entry_points.txt +0 -0
  47. {pypcapkit-1.3.1.post7.dist-info → pypcapkit-1.3.1.post8.dist-info}/top_level.txt +0 -0
pcapkit/__init__.py CHANGED
@@ -123,4 +123,4 @@ __all__ = [
123
123
  ]
124
124
 
125
125
  #: version number
126
- __version__ = '1.3.1.post7'
126
+ __version__ = '1.3.1.post8'
@@ -11979,9 +11979,9 @@ class AppType(StrEnum):
11979
11979
  #: - [UDP] Indura Collector
11980
11980
  indura: 'AppType' = 3156, 'indura', TransportProtocol.get('tcp') | TransportProtocol.get('udp')
11981
11981
 
11982
- #: - [TCP] CCC Listener Port
11983
- #: - [UDP] CCC Listener Port
11984
- e3consultants: 'AppType' = 3157, 'e3consultants', TransportProtocol.get('tcp') | TransportProtocol.get('udp')
11982
+ #: - [TCP] LSA Communicator
11983
+ #: - [UDP] LSA Communicator
11984
+ lsa_comm: 'AppType' = 3157, 'lsa-comm', TransportProtocol.get('tcp') | TransportProtocol.get('udp')
11985
11985
 
11986
11986
  #: - [TCP] SmashTV Protocol
11987
11987
  #: - [UDP] SmashTV Protocol
@@ -325,6 +325,8 @@ class Info(Mapping[str, VT], Generic[VT], metaclass=InfoMeta):
325
325
 
326
326
  def __iter__(self) -> 'Iterator[str]':
327
327
  for key in self.__dict__:
328
+ if key in self.__excluded__:
329
+ continue
328
330
  yield self.__map_reverse__.get(key, key)
329
331
 
330
332
  def __getitem__(self, name: 'str') -> 'VT':
pcapkit/dumpkit/pcap.py CHANGED
@@ -13,6 +13,7 @@ import sys
13
13
  from typing import TYPE_CHECKING
14
14
 
15
15
  from pcapkit.dumpkit.common import DumperBase as Dumper
16
+ from pcapkit.protocols.data.misc.pcap.header import Header as Data_Header
16
17
  from pcapkit.protocols.misc.pcap.frame import Frame
17
18
  from pcapkit.protocols.misc.pcap.header import Header
18
19
 
@@ -24,6 +25,7 @@ if TYPE_CHECKING:
24
25
  from typing_extensions import Literal
25
26
 
26
27
  from pcapkit.const.reg.linktype import LinkType as Enum_LinkType
28
+ from pcapkit.protocols.data.misc.pcap.frame import Frame as Data_Frame
27
29
 
28
30
  __all__ = [
29
31
  'PCAPIO',
@@ -41,6 +43,9 @@ class PCAPIO(Dumper):
41
43
  **kwargs: arbitrary keyword arguments
42
44
 
43
45
  """
46
+ if TYPE_CHECKING:
47
+ #: PCAP file global header.
48
+ _ghdr: 'Data_Header'
44
49
 
45
50
  ##########################################################################
46
51
  # Properties.
@@ -77,7 +82,7 @@ class PCAPIO(Dumper):
77
82
 
78
83
  super().__init__(fname, protocol=protocol, byteorder=byteorder, nanosecond=nanosecond, **kwargs)
79
84
 
80
- def __call__(self, value: 'Frame', name: 'Optional[str]' = None) -> 'PCAPIO':
85
+ def __call__(self, value: 'Data_Frame', name: 'Optional[str]' = None) -> 'PCAPIO':
81
86
  """Dump a new frame.
82
87
 
83
88
  Args:
@@ -108,15 +113,17 @@ class PCAPIO(Dumper):
108
113
  **kwargs: arbitrary keyword arguments
109
114
 
110
115
  """
111
- packet = Header(
116
+ header = Header(
112
117
  network=protocol,
113
118
  byteorder=byteorder,
114
119
  nanosecond=nanosecond,
115
- ).data
120
+ )
121
+ packet = header.data
116
122
  with open(self._file, 'wb') as file:
117
123
  file.write(packet)
124
+ self._ghdr = header.info
118
125
 
119
- def _append_value(self, value: 'Frame', file: 'IO[bytes]', name: 'str') -> 'None': # pylint: disable=unused-argument
126
+ def _append_value(self, value: 'Data_Frame', file: 'IO[bytes]', name: 'str') -> 'None': # pylint: disable=unused-argument
120
127
  """Call this function to write contents.
121
128
 
122
129
  Args:
@@ -130,7 +137,8 @@ class PCAPIO(Dumper):
130
137
  num=self._fnum,
131
138
  proto=self._link,
132
139
  packet=value.packet,
133
- **value.info.frame_info,
140
+ header=self._ghdr,
141
+ **value.frame_info,
134
142
  ).data
135
143
  file.write(packet)
136
144
  self._fnum += 1
@@ -5,7 +5,7 @@
5
5
  from typing import TYPE_CHECKING
6
6
 
7
7
  from pcapkit.corekit.infoclass import info_final
8
- from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from typing_extensions import Literal
@@ -20,7 +20,7 @@ __all__ = [
20
20
  ]
21
21
 
22
22
 
23
- class FTP(Data):
23
+ class FTP(Protocol):
24
24
  """Data model for FTP protocol."""
25
25
 
26
26
  #: Type.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from typing import Any
@@ -23,7 +24,7 @@ __all__ = [
23
24
 
24
25
 
25
26
  @info_final
26
- class HTTP(Data):
27
+ class HTTP(Protocol):
27
28
  """Data model for HTTP/1.* protocol."""
28
29
 
29
30
  #: HTTP receipt.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from typing import Optional
@@ -38,7 +39,7 @@ class Flags(Data):
38
39
  __value__: 'FrameType.Flags'
39
40
 
40
41
 
41
- class HTTP(Data):
42
+ class HTTP(Protocol):
42
43
  """Data model for HTTP/2 protocol."""
43
44
 
44
45
  #: Length.
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from pcapkit.const.reg.transtype import TransType
@@ -13,7 +13,7 @@ __all__ = ['AH']
13
13
 
14
14
 
15
15
  @info_final
16
- class AH(Data):
16
+ class AH(Protocol):
17
17
  """Data model for AH protocol."""
18
18
 
19
19
  #: Next header.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import timedelta
@@ -82,7 +83,7 @@ class Parameter(Data):
82
83
 
83
84
 
84
85
  @info_final
85
- class HIP(Data):
86
+ class HIP(Protocol):
86
87
  """Data model for HIP header."""
87
88
 
88
89
  #: Next header.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import timedelta
@@ -50,7 +51,7 @@ class Option(Data):
50
51
 
51
52
 
52
53
  @info_final
53
- class HOPOPT(Data):
54
+ class HOPOPT(Protocol):
54
55
  """Data model for HOPOPT protocol."""
55
56
 
56
57
  #: Next header.
@@ -7,6 +7,7 @@ from pcapkit.const.ipv4.option_class import OptionClass
7
7
  from pcapkit.const.ipv4.tos_del import ToSDelay
8
8
  from pcapkit.corekit.infoclass import info_final
9
9
  from pcapkit.protocols.data.data import Data
10
+ from pcapkit.protocols.data.protocol import Protocol
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from datetime import timedelta
@@ -88,7 +89,7 @@ class Flags(Data):
88
89
 
89
90
 
90
91
  @info_final
91
- class IPv4(Data):
92
+ class IPv4(Protocol):
92
93
  """Data model for IPv4 packet."""
93
94
 
94
95
  #: Version.
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from ipaddress import IPv6Address
@@ -21,7 +21,7 @@ __all__ = [
21
21
 
22
22
 
23
23
  @info_final
24
- class IPv6(Data):
24
+ class IPv6(Protocol):
25
25
  """Data model for Internet Protocol version 6.
26
26
 
27
27
  Important:
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from pcapkit.const.reg.transtype import TransType
@@ -13,7 +13,7 @@ __all__ = ['IPv6_Frag']
13
13
 
14
14
 
15
15
  @info_final
16
- class IPv6_Frag(Data):
16
+ class IPv6_Frag(Protocol):
17
17
  """Data model for IPv6 fragment header."""
18
18
 
19
19
  #: Next header.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import timedelta
@@ -50,7 +51,7 @@ class Option(Data):
50
51
 
51
52
 
52
53
  @info_final
53
- class IPv6_Opts(Data):
54
+ class IPv6_Opts(Protocol):
54
55
  """Data model for IPv6-Opts protocol."""
55
56
 
56
57
  #: Next header.
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from ipaddress import IPv6Address
@@ -19,7 +19,7 @@ __all__ = [
19
19
  ]
20
20
 
21
21
 
22
- class IPv6_Route(Data):
22
+ class IPv6_Route(Protocol):
23
23
  """Data model for IPv6-Route protocol."""
24
24
 
25
25
  #: Next header.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from pcapkit.const.ipx.packet import Packet
@@ -35,7 +36,7 @@ class Address(Data):
35
36
 
36
37
 
37
38
  @info_final
38
- class IPX(Data):
39
+ class IPX(Protocol):
39
40
  """Data model for Internetwork Packet Exchange."""
40
41
 
41
42
  #: Checksum.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import datetime as dt_type
@@ -84,7 +85,7 @@ __all__ = [
84
85
  ]
85
86
 
86
87
 
87
- class MH(Data):
88
+ class MH(Protocol):
88
89
  """Data model for MH protocol."""
89
90
 
90
91
  #: Next header.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from ipaddress import IPv4Address, IPv6Address
@@ -43,7 +44,7 @@ class Type(Data):
43
44
 
44
45
 
45
46
  @info_final
46
- class ARP(Data):
47
+ class ARP(Protocol):
47
48
  """Data model for ARP packet."""
48
49
 
49
50
  #: Hardware type.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from pcapkit.const.reg.ethertype import EtherType
@@ -13,7 +14,7 @@ __all__ = ['Ethernet']
13
14
 
14
15
 
15
16
  @info_final
16
- class Ethernet(Data):
17
+ class Ethernet(Protocol):
17
18
  """Data model for ethernet packet."""
18
19
 
19
20
  #: Destination MAC address.
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from typing import Optional
@@ -34,7 +35,7 @@ class Flags(Data):
34
35
 
35
36
 
36
37
  @info_final
37
- class L2TP(Data):
38
+ class L2TP(Protocol):
38
39
  """Data model for L2TP packet."""
39
40
 
40
41
  #: Flags and version info.
@@ -58,4 +59,5 @@ class L2TP(Data):
58
59
  #: Header length.
59
60
  hdr_len: 'int'
60
61
 
61
- def __init__(self, flags: 'Flags', version: 'int', length: 'Optional[int]', tunnelid: 'int', sessionid: 'int', ns: 'Optional[int]', nr: 'Optional[int]', offset: 'Optional[int]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,redefined-builtin,multiple-statements,line-too-long
62
+ def __init__(self, flags: 'Flags', version: 'int', length: 'Optional[int]', tunnelid: 'int', sessionid: 'int',
63
+ ns: 'Optional[int]', nr: 'Optional[int]', offset: 'Optional[int]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,redefined-builtin,multiple-statements,line-too-long
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from ipaddress import IPv4Address
@@ -31,7 +32,7 @@ class CrytographicAuthentication(Data):
31
32
 
32
33
 
33
34
  @info_final
34
- class OSPF(Data):
35
+ class OSPF(Protocol):
35
36
  """Data model for OSPF packet."""
36
37
 
37
38
  #: Version number.
@@ -53,4 +54,5 @@ class OSPF(Data):
53
54
  #: Authentication.
54
55
  auth: 'bytes | CrytographicAuthentication'
55
56
 
56
- def __init__(self, version: 'int', type: 'Packet', len: 'int', router_id: 'IPv4Address', area_id: 'IPv4Address', chksum: 'bytes', autype: 'Authentication') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,line-too-long,multiple-statements,redefined-builtin
57
+ def __init__(self, version: 'int', type: 'Packet', len: 'int', router_id: 'IPv4Address',
58
+ area_id: 'IPv4Address', chksum: 'bytes', autype: 'Authentication') -> 'None': ... # pylint: disable=super-init-not-called,unused-argument,line-too-long,multiple-statements,redefined-builtin
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from pcapkit.const.reg.ethertype import EtherType
@@ -29,7 +30,7 @@ class TCI(Data):
29
30
 
30
31
 
31
32
  @info_final
32
- class VLAN(Data):
33
+ class VLAN(Protocol):
33
34
  """Data model for 802.1Q customer VLAN tag type."""
34
35
 
35
36
  #: Tag control information.
@@ -2,13 +2,13 @@
2
2
  """data models for no-payload packet"""
3
3
 
4
4
  from pcapkit.corekit.infoclass import info_final
5
- from pcapkit.protocols.data.data import Data
5
+ from pcapkit.protocols.data.protocol import Protocol
6
6
 
7
7
  __all__ = ['NoPayload']
8
8
 
9
9
 
10
10
  @info_final
11
- class NoPayload(Data):
11
+ class NoPayload(Protocol):
12
12
  """No-payload packet is an empty packet."""
13
13
 
14
14
  # NOTE: We add this method for both type annotation and to mark that this
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import datetime
@@ -31,7 +32,7 @@ class FrameInfo(Data):
31
32
 
32
33
 
33
34
  @info_final
34
- class Frame(Data):
35
+ class Frame(Protocol):
35
36
  """Frame header of PCAP file."""
36
37
 
37
38
  #: Metadata information.
@@ -51,4 +52,5 @@ class Frame(Data):
51
52
  #: Protocol chain.
52
53
  protocols: 'str'
53
54
 
54
- def __init__(self, frame_info: 'FrameInfo', time: 'datetime', number: 'int', time_epoch: 'Decimal', len: 'int', cap_len: 'int') -> 'None': ... # pylint: disable=unused-argument,multiple-statements,super-init-not-called,line-too-long,redefined-builtin
55
+ def __init__(self, frame_info: 'FrameInfo', time: 'datetime', number: 'int', time_epoch: 'Decimal',
56
+ len: 'int', cap_len: 'int') -> 'None': ... # pylint: disable=unused-argument,multiple-statements,super-init-not-called,line-too-long,redefined-builtin
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from typing_extensions import Literal
@@ -31,7 +32,7 @@ class MagicNumber(Data):
31
32
 
32
33
 
33
34
  @info_final
34
- class Header(Data):
35
+ class Header(Protocol):
35
36
  """Global header of PCAP file."""
36
37
 
37
38
  #: Magic number.
@@ -8,6 +8,7 @@ from typing import TYPE_CHECKING
8
8
  from pcapkit.corekit.infoclass import info_final
9
9
  from pcapkit.corekit.multidict import MultiDict
10
10
  from pcapkit.protocols.data.data import Data
11
+ from pcapkit.protocols.data.protocol import Protocol
11
12
  from pcapkit.utilities.compat import localcontext
12
13
 
13
14
  __all__ = [
@@ -59,7 +60,7 @@ if TYPE_CHECKING:
59
60
  WireGuardKeyLabel)
60
61
 
61
62
 
62
- class PCAPNG(Data):
63
+ class PCAPNG(Protocol):
63
64
  """Data model for PCAP-NG file blocks."""
64
65
 
65
66
  #: Block type.
@@ -145,7 +146,8 @@ class SectionHeaderBlock(PCAPNG):
145
146
  options: 'OrderedMultiDict[Enum_OptionType, Option]'
146
147
 
147
148
  if TYPE_CHECKING:
148
- def __init__(self, type: 'Enum_BlockType', length: 'int', byteorder: 'Literal["big", "little"]', version: 'VersionInfo', # pylint: disable=unused-argument
149
+ def __init__(self, type: 'Enum_BlockType', length: 'int', byteorder: 'Literal["big", "little"]',
150
+ version: 'VersionInfo', # pylint: disable=unused-argument
149
151
  section_length: 'int', options: 'OrderedMultiDict[Enum_OptionType, Option]') -> None: ...
150
152
 
151
153
 
@@ -255,7 +257,8 @@ class IF_FilterOption(Option):
255
257
  expression: 'bytes'
256
258
 
257
259
  if TYPE_CHECKING:
258
- def __init__(self, type: 'Enum_OptionType', length: 'int', code: 'Enum_FilterType', expression: 'bytes') -> None: ...
260
+ def __init__(self, type: 'Enum_OptionType', length: 'int', code: 'Enum_FilterType',
261
+ expression: 'bytes') -> None: ...
259
262
 
260
263
 
261
264
  @info_final
@@ -384,7 +387,8 @@ class EPB_HashOption(Option):
384
387
  hash: 'bytes'
385
388
 
386
389
  if TYPE_CHECKING:
387
- def __init__(self, type: 'Enum_OptionType', length: 'int', algorithm: 'Enum_HashAlgorithm', hash: 'bytes') -> 'None': ...
390
+ def __init__(self, type: 'Enum_OptionType', length: 'int', algorithm: 'Enum_HashAlgorithm',
391
+ hash: 'bytes') -> 'None': ...
388
392
 
389
393
 
390
394
  @info_final
@@ -430,7 +434,8 @@ class EPB_VerdictOption(Option):
430
434
  value: 'bytes'
431
435
 
432
436
  if TYPE_CHECKING:
433
- def __init__(self, type: 'Enum_OptionType', length: 'int', verdict: 'Enum_VerdictType', value: 'bytes') -> 'None': ...
437
+ def __init__(self, type: 'Enum_OptionType', length: 'int', verdict: 'Enum_VerdictType',
438
+ value: 'bytes') -> 'None': ...
434
439
 
435
440
 
436
441
  @info_final
@@ -623,7 +628,8 @@ class NameResolutionBlock(PCAPNG):
623
628
  #: Name resolution mapping (name -> IP address).
624
629
  reverse_mapping: 'MultiDict[str, IPv4Address | IPv6Address]'
625
630
 
626
- def __init__(self, type: 'Enum_BlockType', length: 'int', records: 'OrderedMultiDict[Enum_RecordType, NameResolutionRecord]',
631
+ def __init__(self, type: 'Enum_BlockType', length: 'int',
632
+ records: 'OrderedMultiDict[Enum_RecordType, NameResolutionRecord]',
627
633
  options: 'OrderedMultiDict[Enum_OptionType, Option]') -> 'None': ...
628
634
 
629
635
 
@@ -736,7 +742,8 @@ class SystemdJournalExportBlock(PCAPNG):
736
742
  data: 'tuple[OrderedMultiDict[str, str | bytes], ...]'
737
743
 
738
744
  if TYPE_CHECKING:
739
- def __init__(self, type: 'Enum_BlockType', length: 'int', data: 'tuple[OrderedMultiDict[str, str | bytes], ...]') -> 'None': ...
745
+ def __init__(self, type: 'Enum_BlockType', length: 'int',
746
+ data: 'tuple[OrderedMultiDict[str, str | bytes], ...]') -> 'None': ...
740
747
 
741
748
 
742
749
  class DSBSecrets(Data):
@@ -880,7 +887,8 @@ class PACK_HashOption(Option):
880
887
  hash: 'bytes'
881
888
 
882
889
  if TYPE_CHECKING:
883
- def __init__(self, type: 'Enum_OptionType', length: 'int', algorithm: 'Enum_HashAlgorithm', hash: 'bytes') -> 'None': ...
890
+ def __init__(self, type: 'Enum_OptionType', length: 'int', algorithm: 'Enum_HashAlgorithm',
891
+ hash: 'bytes') -> 'None': ...
884
892
 
885
893
 
886
894
  @info_final
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from typing import Optional
@@ -13,15 +13,13 @@ __all__ = ['Raw']
13
13
 
14
14
 
15
15
  @info_final
16
- class Raw(Data):
16
+ class Raw(Protocol):
17
17
  """Raw packet is an unknown protocol."""
18
18
 
19
19
  #: Original enumeration of this protocol.
20
20
  protocol: 'Optional[int]'
21
- #: packet data
22
- packet: 'bytes'
23
21
  #: error instance when parsing packet data
24
22
  error: 'Optional[Exception]'
25
23
 
26
24
  if TYPE_CHECKING:
27
- def __init__(self, protocol: 'Optional[int]', packet: 'bytes', error: 'Optional[Exception]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements
25
+ def __init__(self, protocol: 'Optional[int]', error: 'Optional[Exception]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements
@@ -11,6 +11,14 @@ __all__ = [
11
11
  ]
12
12
 
13
13
 
14
+ class Protocol(Data):
15
+ """Root protocol."""
16
+
17
+ if TYPE_CHECKING:
18
+ #: Packet payload.
19
+ packet: 'bytes'
20
+
21
+
14
22
  @info_final
15
23
  class Packet(Data):
16
24
  """Header and payload data."""
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
7
  from pcapkit.protocols.data.data import Data
8
+ from pcapkit.protocols.data.protocol import Protocol
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from datetime import timedelta
@@ -67,11 +68,12 @@ class Flags(Data):
67
68
  fin: 'bool'
68
69
 
69
70
  if TYPE_CHECKING:
70
- def __init__(self, cwr: 'bool', ece: 'bool', urg: 'bool', ack: 'bool', psh: 'bool', rst: 'bool', syn: 'bool', fin: 'bool') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
71
+ def __init__(self, cwr: 'bool', ece: 'bool', urg: 'bool', ack: 'bool',
72
+ psh: 'bool', rst: 'bool', syn: 'bool', fin: 'bool') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
71
73
 
72
74
 
73
75
  @info_final
74
- class TCP(Data):
76
+ class TCP(Protocol):
75
77
  """Data model for TCP packet."""
76
78
 
77
79
  #: Source port.
@@ -99,7 +101,8 @@ class TCP(Data):
99
101
  #: Connection control flags.
100
102
  connection: 'TCP_Flags'
101
103
 
102
- def __init__(self, srcport: 'AppType', dstport: 'AppType', seq: 'int', ack: 'int', hdr_len: 'int', flags: 'Flags', window_size: 'int', checksum: 'bytes', urgent_pointer: 'int') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
104
+ def __init__(self, srcport: 'AppType', dstport: 'AppType', seq: 'int', ack: 'int', hdr_len: 'int',
105
+ flags: 'Flags', window_size: 'int', checksum: 'bytes', urgent_pointer: 'int') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
103
106
 
104
107
 
105
108
  class Option(Data):
@@ -4,7 +4,7 @@
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from pcapkit.corekit.infoclass import info_final
7
- from pcapkit.protocols.data.data import Data
7
+ from pcapkit.protocols.data.protocol import Protocol
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from pcapkit.const.reg.apptype import AppType
@@ -13,7 +13,7 @@ __all__ = ['UDP']
13
13
 
14
14
 
15
15
  @info_final
16
- class UDP(Data):
16
+ class UDP(Protocol):
17
17
  """Data model for UDP protocol."""
18
18
 
19
19
  #: Source port.
@@ -83,7 +83,7 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
83
83
  #: c.f. :meth:`self._decode_next_layer <pcapkit.protocols.internet.internet.Internet._decode_next_layer>`
84
84
  #: & :meth:`self._import_next_layer <pcapkit.protocols.internet.internet.Internet._import_next_layer>`.
85
85
  __proto__ = collections.defaultdict(
86
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[return-value,arg-type]
86
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
87
87
  {
88
88
  Enum_TransType.HOPOPT: ModuleDescriptor('pcapkit.protocols.internet.hopopt', 'HOPOPT'),
89
89
  Enum_TransType.IPv4: ModuleDescriptor('pcapkit.protocols.internet.ipv4', 'IPv4'),
@@ -72,7 +72,7 @@ class Link(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstract-m
72
72
  #: c.f. :meth:`self._decode_next_layer <pcapkit.protocols.protocol.Protocol._decode_next_layer>`
73
73
  #: & :meth:`self._import_next_layer <pcapkit.protocols.protocol.Protocol._import_next_layer>`.
74
74
  __proto__ = collections.defaultdict(
75
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[arg-type,return-value]
75
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
76
76
  {
77
77
  Enum_EtherType.Address_Resolution_Protocol: ModuleDescriptor('pcapkit.protocols.link.arp', 'ARP'),
78
78
  Enum_EtherType.Reverse_Address_Resolution_Protocol: ModuleDescriptor('pcapkit.protocols.link.rarp', 'RARP'),
@@ -88,7 +88,7 @@ class Frame(Protocol[Data_Frame, Schema_Frame],
88
88
  #: The values should be a tuple representing the module name and class name, or
89
89
  #: a :class:`~pcapkit.protocols.protocol.Protocol` subclass.
90
90
  __proto__ = collections.defaultdict(
91
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[return-value,arg-type]
91
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
92
92
  {
93
93
  Enum_LinkType.ETHERNET: ModuleDescriptor('pcapkit.protocols.link', 'Ethernet'),
94
94
  Enum_LinkType.IPV4: ModuleDescriptor('pcapkit.protocols.internet', 'IPv4'),
@@ -524,7 +524,7 @@ class PCAPNG(Protocol[Data_PCAPNG, Schema_PCAPNG],
524
524
  #: The values should be a tuple representing the module name and class name,
525
525
  #: or a :class:`~pcapkit.protocols.protocol.Protocol` subclass.
526
526
  __proto__ = collections.defaultdict(
527
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[arg-type,return-value]
527
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
528
528
  {
529
529
  Enum_LinkType.ETHERNET: ModuleDescriptor('pcapkit.protocols.link', 'Ethernet'),
530
530
  Enum_LinkType.IPV4: ModuleDescriptor('pcapkit.protocols.internet', 'IPv4'),
@@ -862,7 +862,10 @@ class PCAPNG(Protocol[Data_PCAPNG, Schema_PCAPNG],
862
862
  self._byte = self._ctx.section.byteorder
863
863
  packet['byteorder'] = self._byte
864
864
  self.__header__ = cast('Schema_PCAPNG', self.__schema__.unpack(self._file, length, packet)) # type: ignore[call-arg,misc]
865
- return self.read(length, **kwargs)
865
+
866
+ data = self.read(length, **kwargs)
867
+ data.__update__(packet=self.packet.payload)
868
+ return data
866
869
 
867
870
  def read(self, length: 'Optional[int]' = None, *, _read: 'bool' = True,
868
871
  _seek_set: 'int' = 0, **kwargs: 'Any') -> 'Data_PCAPNG':
@@ -79,7 +79,6 @@ class Raw(Protocol[Data_Raw, Schema_Raw],
79
79
  """
80
80
  raw = Data_Raw(
81
81
  protocol=alias,
82
- packet=self._data,
83
82
  error=error,
84
83
  )
85
84
 
@@ -116,7 +116,7 @@ class ProtocolBase(Generic[_PT, _ST], metaclass=ProtocolMeta):
116
116
  #: The values should be a tuple representing the module name and class name,
117
117
  #: or a :class:`Protocol` subclass.
118
118
  __proto__: 'DefaultDict[int, ModuleDescriptor[ProtocolBase] | Type[ProtocolBase]]' = collections.defaultdict(
119
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[return-value,arg-type]
119
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
120
120
  )
121
121
 
122
122
  ##########################################################################
@@ -520,6 +520,9 @@ class ProtocolBase(Generic[_PT, _ST], metaclass=ProtocolMeta):
520
520
  # post-init customisations
521
521
  self.__post_init__(file, length, **kwargs) # type: ignore[arg-type]
522
522
 
523
+ # inject packet payload to the info dict
524
+ self._info.__update__(packet=self.packet.payload)
525
+
523
526
  @overload
524
527
  def __post_init__(self, file: 'IO[bytes] | bytes', length: 'Optional[int]' = ..., **kwargs: 'Any') -> 'None': ...
525
528
  @overload
@@ -50,7 +50,6 @@ __all__ = [
50
50
  'HIP_RelayToParameter', 'HIP_RouteViaParameter', 'HIP_FromParameter',
51
51
  'HIP_RVSHMACParameter', 'HIP_RelayHMACParameter',
52
52
  'IPv4',
53
- 'IPv4_OptionType',
54
53
  'IPv4_UnassignedOption', 'IPv4_EOOLOption', 'IPv4_NOPOption',
55
54
  'IPv4_SECOption', 'IPv4_LSROption', 'IPv4_TSOption',
56
55
  'IPv4_ESECOption', 'IPv4_RROption', 'IPv4_SIDOption',
@@ -65,7 +65,7 @@ def schema_final(cls: '_ST', *, _finalised: 'bool' = True) -> '_ST':
65
65
  '__payload__', '__finalised__']
66
66
  temp.extend(cls.__additional__)
67
67
  for obj in cls.mro():
68
- temp.extend(dir(obj))
68
+ temp.extend(el for el in dir(obj) if el not in cls.__fields__)
69
69
  cls.__builtin__ = set(temp)
70
70
  cls.__excluded__.extend(cls.__builtin__)
71
71
 
@@ -307,7 +307,7 @@ class TCP(Transport[Data_TCP, Schema_TCP],
307
307
  #: :meth:`self._decode_next_layer <pcapkit.protocols.transport.transport.Transport._decode_next_layer>`
308
308
  #: & :meth:`self._import_next_layer <pcapkit.protocols.protocol.Protocol._import_next_layer>`.
309
309
  __proto__ = collections.defaultdict(
310
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[arg-type,return-value]
310
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
311
311
  {
312
312
  21: ModuleDescriptor('pcapkit.protocols.application.ftp', 'FTP'), # FTP
313
313
  80: ModuleDescriptor('pcapkit.protocols.application.httpv1', 'HTTP'), # HTTP/1.*
@@ -70,7 +70,7 @@ class UDP(Transport[Data_UDP, Schema_UDP],
70
70
  #: :meth:`self._decode_next_layer <pcapkit.protocols.transport.transport.Transport._decode_next_layer>`
71
71
  #: & :meth:`self._import_next_layer <pcapkit.protocols.protocol.Protocol._import_next_layer>`.
72
72
  __proto__ = collections.defaultdict(
73
- lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'), # type: ignore[arg-type,return-value]
73
+ lambda: ModuleDescriptor('pcapkit.protocols.misc.raw', 'Raw'),
74
74
  {
75
75
  80: ModuleDescriptor('pcapkit.protocols.application.http', 'HTTP'), # HTTP
76
76
  },
pcapkit/toolkit/pcapng.py CHANGED
@@ -22,7 +22,6 @@ from pcapkit.protocols.data.misc.pcap.frame import FrameInfo as Data_FrameInfo
22
22
  if TYPE_CHECKING:
23
23
  from ipaddress import IPv4Address, IPv6Address
24
24
 
25
- from pcapkit.const.reg.linktype import LinkType
26
25
  from pcapkit.protocols.internet.ipv4 import IPv4
27
26
  from pcapkit.protocols.internet.ipv6 import IPv6
28
27
  from pcapkit.protocols.internet.ipv6_frag import IPv6_Frag
@@ -248,4 +247,5 @@ def block2frame(block: 'Packet', *, nanosecond: 'bool' = False) -> 'Data_Frame':
248
247
  len=block.original_len,
249
248
  cap_len=block.captured_len,
250
249
  )
250
+ frame.__update__(packet=block.packet)
251
251
  return frame
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pypcapkit
3
- Version: 1.3.1.post7
3
+ Version: 1.3.1.post8
4
4
  Summary: PyPCAPKit: comprehensive network packet analysis library
5
5
  Author-email: Jarry Shaw <jarryshaw@icloud.com>
6
6
  Maintainer: Jarry Shaw
@@ -1,4 +1,4 @@
1
- pcapkit/__init__.py,sha256=rWV3ev_skm7fAWeF-gagvbvaqxmDZe1TiXOu5D2wyKA,4097
1
+ pcapkit/__init__.py,sha256=S4lkS3FVsA6rQeEJYkLjYg1n_AAaq2do3IvVvcPbOlw,4097
2
2
  pcapkit/__main__.py,sha256=pckITFrDzzXCXPM_r03AAhvpGyqFWdwyKDkGRZENiv4,6313
3
3
  pcapkit/all.py,sha256=6G7rVFlajYk98F5vCYcLOw-CkXdEw4C2zAwnTgU0asU,6679
4
4
  pcapkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -117,7 +117,7 @@ pcapkit/const/pcapng/record_type.py,sha256=4rZytbhhF6u5SPvQ8ew3jx4OhN_rwDQG3I4Jl
117
117
  pcapkit/const/pcapng/secrets_type.py,sha256=n_662aowLtqA25ilbdG6BWb2rYmrdBJt79_SISzfJkw,1578
118
118
  pcapkit/const/pcapng/verdict_type.py,sha256=_jEkN0g6CX-DGshAj-lUiZjiwdK7Fqou2pnzgZ-WyIk,1476
119
119
  pcapkit/const/reg/__init__.py,sha256=xKABPHwDQ0diN2sFA7hkw42FNsb6tx294XemEjTs2g8,1469
120
- pcapkit/const/reg/apptype.py,sha256=Id0d2_EHdssz5q03tFEf2BEoojq5I5QUb0bY4l5yANg,1430054
120
+ pcapkit/const/reg/apptype.py,sha256=yUyEdBpDJiE-DtLRZh19l3bcYYptoFXsjko3M8EsOBo,1430042
121
121
  pcapkit/const/reg/ethertype.py,sha256=Ie2rI6rEC6Us05jtK-hHkrzad6ecTSktK56tLn52TfQ,26732
122
122
  pcapkit/const/reg/linktype.py,sha256=waebkNbqjfQTn7kySBmUCoVYNxWYL33pZxPcJurmrnE,36784
123
123
  pcapkit/const/reg/transtype.py,sha256=ulnDwzkZ6WmCpusfsSoBwiT-WROPbDQZNFAX3caM0lo,12910
@@ -129,7 +129,7 @@ pcapkit/const/tcp/option.py,sha256=JdbYPsWSTeWBV-ZqsSV0PcliGH96hfxc9VvoVYCYQJc,5
129
129
  pcapkit/const/vlan/__init__.py,sha256=e58kBqVyx-aNe10uWkfI1grb1gI5t-VxyYnmP4qT2bM,690
130
130
  pcapkit/const/vlan/priority_level.py,sha256=lditGE8zcRNmCnPW7lTM45R5Q9RQ-CqBRkqGGDSByJw,1936
131
131
  pcapkit/corekit/__init__.py,sha256=YcNlfudunIO0cnpU7xX_r-xZafcO39TmS8Vp7z45BjE,1659
132
- pcapkit/corekit/infoclass.py,sha256=FNdoM7qkNv5iVREIGU95bGj6mU1PANS3-0TZ9hbrUZc,14458
132
+ pcapkit/corekit/infoclass.py,sha256=cRzOD5dtYe-rgS9-UF4XAgwqVmvaBoqPjIgvJ03EJI0,14523
133
133
  pcapkit/corekit/io.py,sha256=ugc1LVIVcVQx2JKcVgdYw92oHmdObitYLWOGWWRrnSM,19991
134
134
  pcapkit/corekit/module.py,sha256=w-y1wBTV2EZvkxa6dQmyVjC17uIOcoBhXQFLbhp6pRc,988
135
135
  pcapkit/corekit/multidict.py,sha256=VuB9-DFZYpl_Z0z07YAhykoj9_ccHCp1RDG3uCceC1s,22015
@@ -145,7 +145,7 @@ pcapkit/corekit/fields/strings.py,sha256=U9Q5_EvO_0PwHoWtpuQ1fw0jrcvs9HdZyWO_IIK
145
145
  pcapkit/dumpkit/__init__.py,sha256=Q8eZXOAxPqMojnGfE3ypqxRQOv8wuQfinAabe2W3P6E,370
146
146
  pcapkit/dumpkit/common.py,sha256=oYqT8owCxYoIis4OctGfNTKtpXHL6ncMfihzBUCJ_Bo,7024
147
147
  pcapkit/dumpkit/null.py,sha256=KdlTF3bHLqZpQnbfxVHrZegQfFve8kPoupQneghqSHQ,2270
148
- pcapkit/dumpkit/pcap.py,sha256=cdVVxbN0ZVisMmWWWZ0GUmOoiv_GnacE-9PLU5WHW6U,4408
148
+ pcapkit/dumpkit/pcap.py,sha256=douAnkCm5enq3G7h4KIj1u_BKqOwFxbaxbR3RJfCGec,4737
149
149
  pcapkit/foundation/__init__.py,sha256=clRCrONNK-WMrhTRRNWLOhgb5L4R-tFgURbORV4drbM,1491
150
150
  pcapkit/foundation/extraction.py,sha256=kwU1D_sLLjwbBUuK4NFyQmXaVoE_aZzOJ1nyTb_FT44,38786
151
151
  pcapkit/foundation/engines/__init__.py,sha256=sEukcs7IaJbWOFOvYrFuGHACZeHhFPQZVfLDiDyVDMo,921
@@ -176,7 +176,7 @@ pcapkit/interface/__init__.py,sha256=UnQ1wjAWjP4iTA8HGRNonYDegDzCps4f7oWt7GK4kUE
176
176
  pcapkit/interface/core.py,sha256=l-fomBF0lonkyEML8C4R-pYvqrhCGOfeLRWusknTQYI,8424
177
177
  pcapkit/interface/misc.py,sha256=viLrss71P793OCNH45Ry8FybJLB8YCGTBRb5zqpIrmE,4805
178
178
  pcapkit/protocols/__init__.py,sha256=3jZrKmShb_dtsgnwh9dqqsCN0kOGYzFAEB0H7PMf4Nc,1841
179
- pcapkit/protocols/protocol.py,sha256=VlUlkoWYUXU_v2WNtZA2ou-pxt9QMbMmZym3BEkgMKE,46568
179
+ pcapkit/protocols/protocol.py,sha256=N8uYn570PBpOtg2t7fztLrRYJPlbozsxI5LJFgVxT90,46637
180
180
  pcapkit/protocols/application/__init__.py,sha256=nInVbuUoyQiLGATLiCyxkyEfWyXVJMYVOr7ddrh7LDg,1044
181
181
  pcapkit/protocols/application/application.py,sha256=owZ7PoIWPiyzCcuHtLRCc4FolnFPQ04jxCzE9aOD6Ko,4363
182
182
  pcapkit/protocols/application/ftp.py,sha256=FdNVpBKKYzNV5Cj8Gqm5VqK2O0x9S7SupsL-JgGmdpw,6532
@@ -205,43 +205,43 @@ pcapkit/protocols/application/NotImplemented/tls.py,sha256=47DEQpj8HBSa-_TImW-5J
205
205
  pcapkit/protocols/application/NotImplemented/xmpp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
206
  pcapkit/protocols/data/__init__.py,sha256=8iXwH9mDBKoWVfqbGAWkE9J8cBe9elQP0PEnhhe5rlg,8860
207
207
  pcapkit/protocols/data/data.py,sha256=njmCzl68ZE7B0B1xG_fIg_5B5uYUZjukHgnqUsyIYow,606
208
- pcapkit/protocols/data/protocol.py,sha256=xGiJi5H_CdJVQWmbJE0s-5ni7HC_Od0l7c0MYZ9-GRU,549
208
+ pcapkit/protocols/data/protocol.py,sha256=h7IcnP8w1Dqr_dGXO0C32HZmz5Umb-fJa_N5EINpnGY,672
209
209
  pcapkit/protocols/data/application/__init__.py,sha256=LXVdH-9vMJdpMGB1xxHPoemjC2-73uayKek5yxSivTM,3270
210
- pcapkit/protocols/data/application/ftp.py,sha256=PafhZD2IvhNuyhoYUNaja122dnOKQKP466AKCM15Bpc,1505
211
- pcapkit/protocols/data/application/httpv1.py,sha256=dm0z2r-_d6j7gxkfdGTGNexcwzF41YDHGOh-RGnJMvQ,2266
212
- pcapkit/protocols/data/application/httpv2.py,sha256=uLX8xZ8wWN3981AucBcr8a5KegtXEwnmWASq4rUPSws,9462
210
+ pcapkit/protocols/data/application/ftp.py,sha256=YIZzpmReMlNUdO3ZqwbU8EN3-TFvbl4vcOTVYWwqiKc,1517
211
+ pcapkit/protocols/data/application/httpv1.py,sha256=0PtUkjJ1U1sDktFeT6htjsU7ZFoYA_vKeA84kdpMd8Q,2323
212
+ pcapkit/protocols/data/application/httpv2.py,sha256=V0-qCpobji1BrIOuScSP344qpWqvQTDHHbusgrLRiAc,9519
213
213
  pcapkit/protocols/data/internet/__init__.py,sha256=p7bZwpVbkSv3u3-2nZFg1InvqTmxtiBUoBSBhnVu_gQ,19230
214
- pcapkit/protocols/data/internet/ah.py,sha256=3JyNMr-CpfTI9fXTLnJQMSm7X0JuILB9MUNwa4QMOqc,802
215
- pcapkit/protocols/data/internet/hip.py,sha256=sPVnw1nwayWlHiud_50FV-5bbSr4QiDRTVavXr6ZayY,28950
216
- pcapkit/protocols/data/internet/hopopt.py,sha256=fkz4SroARZ3MCubs_-bwnvUOGfaGVSqJHnGxb6prprY,12166
217
- pcapkit/protocols/data/internet/ipv4.py,sha256=CUD1hTgmcQdAVE2Q0-OwjD76yD53xRotI9GCqKDf9e0,12108
218
- pcapkit/protocols/data/internet/ipv6.py,sha256=2aiAFD_9z-aBPRKiYS4xBXswUfRITFD49Y1kLuczlQo,1781
219
- pcapkit/protocols/data/internet/ipv6_frag.py,sha256=4S0VOzCNjnwFjb4HZ51GLSSkzKIbkHA3XhoWBIBKZ2w,750
220
- pcapkit/protocols/data/internet/ipv6_opts.py,sha256=SeqA2han4UznJG60heP2KYz3NKKniY-rKP31TbWwhCE,12612
221
- pcapkit/protocols/data/internet/ipv6_route.py,sha256=RgKwkt7t6jItpGWXhw0xHQP3pfcsJbFnIbXwIqlKz5A,2547
222
- pcapkit/protocols/data/internet/ipx.py,sha256=UPqWfr-H_As4HA8eHKfOYLKEb2QXoDSKQWxxnZMql6Q,1493
223
- pcapkit/protocols/data/internet/mh.py,sha256=nThpWUcm3X9O16yUNkckzCO0aa0quNolrNK4KW0rzvc,16890
214
+ pcapkit/protocols/data/internet/ah.py,sha256=mKhjHSjaG_p8MPqQIT0N_WHSBDsgX3YOQIuNWhj30Ck,814
215
+ pcapkit/protocols/data/internet/hip.py,sha256=LqilbFkQkQMplPrCNvWOfavKz9MzzXs-GyKbTETirT4,29007
216
+ pcapkit/protocols/data/internet/hopopt.py,sha256=DwQufAUxzZ-dc6CTynxu73SzGUoDBnECXCqqAPKShXw,12223
217
+ pcapkit/protocols/data/internet/ipv4.py,sha256=Nb7CVEFbry0SjuozP9ex71pEcaRaR8QO6GPhaXULIv4,12165
218
+ pcapkit/protocols/data/internet/ipv6.py,sha256=tvWqHRnFI0bul5QtYKKSAB69NkiwjFgWso2FWOexH6E,1793
219
+ pcapkit/protocols/data/internet/ipv6_frag.py,sha256=g60C6EgD6Wdquj-VPHvenkw8tOz97DSStX5SkaXEdro,762
220
+ pcapkit/protocols/data/internet/ipv6_opts.py,sha256=0tb_khH_nosOhwBg_UNLeZ-RMDJKQbJCgPuNZp0ZozE,12669
221
+ pcapkit/protocols/data/internet/ipv6_route.py,sha256=PbBjdKzfKPJScPAtUn2SpTE9dwRLlr6da2zMwqzNoZE,2559
222
+ pcapkit/protocols/data/internet/ipx.py,sha256=YbMCFYP0KDBL8bp19Sw3AjYjcSMQOK7_I8_3utfzgAU,1550
223
+ pcapkit/protocols/data/internet/mh.py,sha256=il17KYIk4lMkvRAq81ivMh_UXcrAMAINCP9M3uAQecg,16947
224
224
  pcapkit/protocols/data/link/__init__.py,sha256=LUbOum8e5JqaixXFd_z7zx3Ii-lJzpmesgZTNdvrgGE,956
225
- pcapkit/protocols/data/link/arp.py,sha256=shAtzJqVdkArFcgIKdwJLBSKHhaOIMIaiZakjumfqB0,2333
226
- pcapkit/protocols/data/link/ethernet.py,sha256=Elf6T8FnlV8F7IGKhAOiH5xdlY7ZQanrQkpqOBE1Zsc,717
227
- pcapkit/protocols/data/link/l2tp.py,sha256=hNMfacvb-14O4hhrWeeG-AJFY9RyldH2uVBVQDc-gv4,1595
228
- pcapkit/protocols/data/link/ospf.py,sha256=QyIFCCXchla8TP6qfiN6BO0SAO29dVfBrFuENgEiXfg,1634
229
- pcapkit/protocols/data/link/vlan.py,sha256=yPF3TtF6NoIlIAu6x_auYQnhT6ggr4CvfpeFyDwJziU,1163
225
+ pcapkit/protocols/data/link/arp.py,sha256=sH2ZTkSqGkwJiM90UWUSi2m7eqvOGzYA9hRJKORamg0,2390
226
+ pcapkit/protocols/data/link/ethernet.py,sha256=VxeOk2p_wqoGT0ew5PrteUsjECoqzRTW2h8tijEjyqI,774
227
+ pcapkit/protocols/data/link/l2tp.py,sha256=m43XvBmZZRz5dS0q5pRQDAKh6XA194sqD-NEOxSfa-w,1673
228
+ pcapkit/protocols/data/link/ospf.py,sha256=yaTOfJixkIKf3daSqxTQ9yfhTsWnw3zi8wOv6uUnCCE,1712
229
+ pcapkit/protocols/data/link/vlan.py,sha256=zQeoMZCjBRqg1OWclRutB_-tqkUiGPnFHtVSsGxgpfY,1220
230
230
  pcapkit/protocols/data/misc/__init__.py,sha256=ok5N8uq14_pCjQIHudj5aQuP2FGW-ojHkmy5Q6yLrtk,7519
231
- pcapkit/protocols/data/misc/null.py,sha256=nPJKlDDHUzafPOkfOYJzxiuWJyiVTEZy2omTJEvEhOQ,584
232
- pcapkit/protocols/data/misc/pcapng.py,sha256=uadQ_SqMSnivK0Zjz9XLv7tAgaMkenDLFKGGSSuQBxQ,27294
233
- pcapkit/protocols/data/misc/raw.py,sha256=BrsHJfMAOmxyhAcKQU6QshUadzXUxc5ELLy95dp0u7k,751
231
+ pcapkit/protocols/data/misc/null.py,sha256=PxiZXoNiRn8j9UuQVIdSGnsPBtBWB_KGvk8CqeQugMo,596
232
+ pcapkit/protocols/data/misc/pcapng.py,sha256=Jx6dlBsjDjGMjuv-aCYLmBshSgmq7ERssERza1co-LA,27498
233
+ pcapkit/protocols/data/misc/raw.py,sha256=tuK-HkV2dEdS_eqs_3_fxLihnTU6ZwNxFQpDdVS6laE,707
234
234
  pcapkit/protocols/data/misc/pcap/__init__.py,sha256=_IwUdgHuQwxe24AwiWwvvv6j-3N6Z-b2m-7q3l7fWQs,535
235
- pcapkit/protocols/data/misc/pcap/frame.py,sha256=PEjpVCIG5eMANApqoBzYn_8_ZEPbZb6h0GxakuevAPA,1532
236
- pcapkit/protocols/data/misc/pcap/header.py,sha256=bSv1vP8frpfZrNzKihBK4Q1UkmkKCWXhdQp3C3rHAuA,1590
235
+ pcapkit/protocols/data/misc/pcap/frame.py,sha256=6SasXQtnXPD9jqEu3wqvH7E4_GxZ-795WfKmRJAqpsg,1610
236
+ pcapkit/protocols/data/misc/pcap/header.py,sha256=o0AWmVI-GK8nTXKroQ15GQDQCIwVCPiuQRlgZEAj9n8,1647
237
237
  pcapkit/protocols/data/transport/__init__.py,sha256=ONSAUTOHBtgfAM2XBUK74XbNs2n-sffM7cFm7UkSIrw,4484
238
- pcapkit/protocols/data/transport/tcp.py,sha256=qC9JiQAGmWrNoCoh2kpCtYOEQIjvUpbBTBMVzBGrE_E,17945
239
- pcapkit/protocols/data/transport/udp.py,sha256=rqM4tf8YmWla-_cSDeq5heSzbhp1b3i08dX5Spd3s-c,755
238
+ pcapkit/protocols/data/transport/tcp.py,sha256=C0n6UG_uuZdbORZdVRgdIiHZkMnwEQo6dgs4Q1DhXmY,18044
239
+ pcapkit/protocols/data/transport/udp.py,sha256=POqqunUmsRWwIXv4lzcLhVlQJUJzNV_BFekpwwD8fJo,767
240
240
  pcapkit/protocols/internet/__init__.py,sha256=92A7PPTi_YYjGvns_aRKaBq2uhRMDc_6bkCemKfuqOw,1507
241
241
  pcapkit/protocols/internet/ah.py,sha256=mPI887GUeJGxy_Ovoh0Hs2vU2i0gZ9nDJYNNmlN5mDo,10219
242
242
  pcapkit/protocols/internet/hip.py,sha256=NloOKuxvcFFvWvv8D5p5EUdgt8zxmZZ6ocDNM-EC_pI,209870
243
243
  pcapkit/protocols/internet/hopopt.py,sha256=dtpe28jxkpZU7HX6wTkxgDX3gz6iuHzbA3uGtCGiQrQ,75260
244
- pcapkit/protocols/internet/internet.py,sha256=kZwQeclQpUbA_ri3t9zEeefV1ecuC-cHzTSytof32iI,11336
244
+ pcapkit/protocols/internet/internet.py,sha256=dF3vYoUq_4DNAmKm2sC7HQ5t55AR0Gj9XjyMrrOlYiA,11297
245
245
  pcapkit/protocols/internet/ip.py,sha256=VfLC4vj4e6NOSWWvBr4sTSrzgRw0WNES6jlFFZbDJl4,1654
246
246
  pcapkit/protocols/internet/ipsec.py,sha256=-8eB-1yb7S2Nppr5rpbXQ1xB7ZwnkxDrw2-m18-jIoo,1545
247
247
  pcapkit/protocols/internet/ipv4.py,sha256=-A4mrKsh76VjyQiUr53xJX8gI7PyO78HET74ZCwR7I8,70545
@@ -261,7 +261,7 @@ pcapkit/protocols/link/__init__.py,sha256=PJNPtYKLSdtqcZkGku2C9l3JBvRTE5ze3O6srC
261
261
  pcapkit/protocols/link/arp.py,sha256=Fks77PjhWXyCGbwSGKw1nsrVea8AK5343nCWfJCWv8Y,16956
262
262
  pcapkit/protocols/link/ethernet.py,sha256=ualSVSEiSPg-K4sq58idd5ad3Lxhga3ko9OXMXcDZH0,8294
263
263
  pcapkit/protocols/link/l2tp.py,sha256=wKdOsjNMnYdEe4RRLyptr7IrN5IKqTPf7y76rw2o2o0,10668
264
- pcapkit/protocols/link/link.py,sha256=8gWu_EXfm8z4-1zPmhVvTvPhSIz2ghhxMUZ9vXckp_0,5962
264
+ pcapkit/protocols/link/link.py,sha256=VOgO62OpTJvyJLN_6-mhOSuoJPJuVctBZl-LzFP9H7A,5923
265
265
  pcapkit/protocols/link/ospf.py,sha256=z01IKw-HdJao3d_ZLm2f_LXzpTresGXsPZSO2xf2A8w,13442
266
266
  pcapkit/protocols/link/rarp.py,sha256=mZcPYXXGMM67zmN4w7MoJ95ufw0cY4NHPcsDNNoQeaM,3250
267
267
  pcapkit/protocols/link/vlan.py,sha256=WDSe_AQIoeKK5VToUdXFnooCjneT4o-lIHmkPWWXWSQ,8585
@@ -273,13 +273,13 @@ pcapkit/protocols/link/NotImplemented/ndp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
273
273
  pcapkit/protocols/link/NotImplemented/ppp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
274
  pcapkit/protocols/misc/__init__.py,sha256=-gT11kcQFhmWa1YpS6LrYKOKZk3Is6GFRjGnYn4fCrM,852
275
275
  pcapkit/protocols/misc/null.py,sha256=gqABjavslAvwbsGPzU-9ZlH0IS12NZcupBirG6ZTgAU,4240
276
- pcapkit/protocols/misc/pcapng.py,sha256=GPulB_VTC_bNGAibcvIBFpwsCrd02KWGdW315DYbllI,238139
277
- pcapkit/protocols/misc/raw.py,sha256=MDDxbwY41J3uvdMnirD_18P5OS5_p-3KI1hNE3_NpwY,5949
276
+ pcapkit/protocols/misc/pcapng.py,sha256=9tFsjPs1rftIFB3CDjwehkRIe1ly6Rpy9dwV3yhxFSM,238173
277
+ pcapkit/protocols/misc/raw.py,sha256=yvnflJHAEQ_pvFJvlV0vWLYfFVLZUprihi36FjKRFYQ,5918
278
278
  pcapkit/protocols/misc/pcap/__init__.py,sha256=-uxoPg3k-8NteBUUxLdgysbpwHbV_uyHyqz75lKpbc4,542
279
- pcapkit/protocols/misc/pcap/frame.py,sha256=PPY7gql7HisyM0QLHDsXWK7w0OZw1mNmHa2OG3v-N8I,18081
279
+ pcapkit/protocols/misc/pcap/frame.py,sha256=ZzDOSFOwBOKTZbMBJMyQ9paMptlWeTlI9UPeyukDGvc,18042
280
280
  pcapkit/protocols/misc/pcap/header.py,sha256=qGGd0z9YBgKCMZbvw8QSe9vTA9HuFO60fKSPju2nOzU,12681
281
- pcapkit/protocols/schema/__init__.py,sha256=h5GqPMdMYNM7089UA8wLP8E17wEAIZCGoSoySFss6Dg,7306
282
- pcapkit/protocols/schema/schema.py,sha256=ZwFbel4DRv94013jFkYycqx9pz3zx1GOZfQ9OyXe92g,29396
281
+ pcapkit/protocols/schema/__init__.py,sha256=Di-u45vhzI7FSr_CF6DKJEFE_d0KJAzPgBXy5VL-2Tk,7283
282
+ pcapkit/protocols/schema/schema.py,sha256=qwGPRs4FmManpxUFXtYB2765xzhjYXMOnfIK4cdvX2I,29437
283
283
  pcapkit/protocols/schema/application/__init__.py,sha256=5Cug38rdq8thUWMol0ICGIPP7FW3nBeBnFWPbnU0sbA,1997
284
284
  pcapkit/protocols/schema/application/ftp.py,sha256=uZm2D5Za3GJCjATk76dJOwNsO8GuFDMNVtqy2qzSmiI,520
285
285
  pcapkit/protocols/schema/application/httpv1.py,sha256=PC-JCR940Uo_s5e0zGAGj5wRLUDUnkR6j0bx_Vf_VhI,524
@@ -312,16 +312,16 @@ pcapkit/protocols/schema/transport/__init__.py,sha256=e2Z308ZrFrCVUiABvQyb_9N_jG
312
312
  pcapkit/protocols/schema/transport/tcp.py,sha256=6JJg7xAn9W2F0iHVPPHkC0B6MqLXiXnLoTU9dq4m8Gc,27984
313
313
  pcapkit/protocols/schema/transport/udp.py,sha256=NjUfAkllOXnxAh-r3lBLZG-lIYK13Eyykya5BvoraJI,3011
314
314
  pcapkit/protocols/transport/__init__.py,sha256=15zwQlVMcPJeG-s1DZCOU4bA_fPfY52-VRQEO7-TWqw,780
315
- pcapkit/protocols/transport/tcp.py,sha256=uDIVf6ckWU-4G0BrzXMzYkQzDmuSIED0dJu7e4pXm6c,113862
315
+ pcapkit/protocols/transport/tcp.py,sha256=izci3nzL4mTQRno0qx3xicfx6uECwknp97SsyOkBGF0,113823
316
316
  pcapkit/protocols/transport/transport.py,sha256=xtLJy6sYZZvwywq840rCcrJ5dLrXmXWzixOxCRppEgs,6348
317
- pcapkit/protocols/transport/udp.py,sha256=JU5Z09W6Qqy2gToDR13YSaPqdLgxJxjHb433Pxh_VaE,7185
317
+ pcapkit/protocols/transport/udp.py,sha256=W2HZsHpkZATG83CQDFYgyBuqyCA-qrwovHCh0IFX1ro,7146
318
318
  pcapkit/protocols/transport/NotImplemented/dccp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
319
319
  pcapkit/protocols/transport/NotImplemented/rsvp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
320
320
  pcapkit/protocols/transport/NotImplemented/sctp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
321
  pcapkit/toolkit/__init__.py,sha256=pidjgoJjQxW8z--lY9eR6k_ANc2kF6U0Rgv99S3QeEs,2623
322
322
  pcapkit/toolkit/dpkt.py,sha256=79ZVcNctw5WiXk4A-bcVL5WASkyG4T7weP-faGcJK6s,12443
323
323
  pcapkit/toolkit/pcap.py,sha256=dz2WSzJJQomhjEiFsePWoBlBzBaSdoqem9ELZ_6gg_I,9080
324
- pcapkit/toolkit/pcapng.py,sha256=TfYmSnNMPlaPye34qtzAePjbPswyM9XGkNgNbu5Lw68,10368
324
+ pcapkit/toolkit/pcapng.py,sha256=rDviBOUTl2brtqzcmomjz7mz0WZFTsN34UEh1Cb4IwA,10358
325
325
  pcapkit/toolkit/pyshark.py,sha256=37KdzGls8b8aI7d-MHS9k0QQbo9Gm1sRDth-eLKVToA,3387
326
326
  pcapkit/toolkit/scapy.py,sha256=L-rmqDWgTjHOH_MiqcwtYXhaPm3pzGc0kh1IUzNyzkI,11445
327
327
  pcapkit/utilities/__init__.py,sha256=nd_SO3k9zXgi-Vesa1bhBiAgu55x2BeRMclLsdz9RWg,692
@@ -458,9 +458,9 @@ pcapkit/vendor/tcp/mp_tcp_option.py,sha256=f6_-VMoQFnhuEbxs17Q1rp6JjFSLXGK3w1K2v
458
458
  pcapkit/vendor/tcp/option.py,sha256=p05DrOt2m0QCf4gjLJzRshQRvaWxmt2PIzsv2UMjsa8,3043
459
459
  pcapkit/vendor/vlan/__init__.py,sha256=qvLktJ0yuoZokas6-_ZGwMJOzbujSCM8pZHQ9jjTegU,674
460
460
  pcapkit/vendor/vlan/priority_level.py,sha256=xVu6M-Ys4pft5I-qPCCxM-KfnMAUnZppD2qPO9gPkVE,2961
461
- pypcapkit-1.3.1.post7.dist-info/LICENSE,sha256=KkKND5E2e1Z6CQvSLPc1lRBy4xPRed41AG6q1txotWk,1516
462
- pypcapkit-1.3.1.post7.dist-info/METADATA,sha256=xLt3Bf3tk3Zzv3nBgIXQZ5WErn-a_WXgb0RVxYIRL9g,7704
463
- pypcapkit-1.3.1.post7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
464
- pypcapkit-1.3.1.post7.dist-info/entry_points.txt,sha256=8tVaZ-N0S2t19ELoTEGq_OlC8-dSmd7dvNn-kMV3afY,100
465
- pypcapkit-1.3.1.post7.dist-info/top_level.txt,sha256=KEssKRhG9ln3EOfGH-yi98HgI-MM9hOHy09QQP-fvk8,8
466
- pypcapkit-1.3.1.post7.dist-info/RECORD,,
461
+ pypcapkit-1.3.1.post8.dist-info/LICENSE,sha256=KkKND5E2e1Z6CQvSLPc1lRBy4xPRed41AG6q1txotWk,1516
462
+ pypcapkit-1.3.1.post8.dist-info/METADATA,sha256=_TvTeZzQDEzmvNM99YWoX7yOKS5sv2YbLBc50baaMv0,7704
463
+ pypcapkit-1.3.1.post8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
464
+ pypcapkit-1.3.1.post8.dist-info/entry_points.txt,sha256=8tVaZ-N0S2t19ELoTEGq_OlC8-dSmd7dvNn-kMV3afY,100
465
+ pypcapkit-1.3.1.post8.dist-info/top_level.txt,sha256=KEssKRhG9ln3EOfGH-yi98HgI-MM9hOHy09QQP-fvk8,8
466
+ pypcapkit-1.3.1.post8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5