pypcapkit 1.3.3.post1__cp311-none-any.whl → 1.3.4__cp311-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.
pcapkit/__init__.py CHANGED
@@ -123,4 +123,4 @@ __all__ = [
123
123
  ]
124
124
 
125
125
  #: version number
126
- __version__ = '1.3.3.post1'
126
+ __version__ = "1.3.4"
@@ -194,8 +194,8 @@ class ReturnCode(IntEnum):
194
194
  #: command if the service knows it must shut down.
195
195
  CODE_421: 'ReturnCode' = 421, 'Service available, closing control connection.'
196
196
 
197
- #: open data connection.
198
- CODE_425: 'ReturnCode' = 425, 'open data connection.'
197
+ #: Can't open data connection.
198
+ CODE_425: 'ReturnCode' = 425, "Can't open data connection."
199
199
 
200
200
  #: Connection closed; transfer aborted.
201
201
  CODE_426: 'ReturnCode' = 426, 'Connection closed; transfer aborted.'
@@ -54,6 +54,10 @@ class StatusCode(IntEnum):
54
54
  #: Early Hints [:rfc:`8297`]
55
55
  CODE_103 = 103, 'Early Hints'
56
56
 
57
+ #: Upload Resumption Supported (TEMPORARY - registered 2024-11-13, expires
58
+ #: 2025-11-13) [draft-ietf-httpbis-resumable-upload-05]
59
+ CODE_104 = 104, 'Upload Resumption Supported'
60
+
57
61
  #: OK [:rfc:`9110#section-15.3.1`]
58
62
  CODE_200 = 200, 'OK'
59
63
 
@@ -267,7 +271,7 @@ class StatusCode(IntEnum):
267
271
  """
268
272
  if not (isinstance(value, int) and 100 <= value <= 599):
269
273
  raise ValueError('%r is not a valid %s' % (value, cls.__name__))
270
- if 104 <= value <= 199:
274
+ if 105 <= value <= 199:
271
275
  #: Unassigned
272
276
  return extend_enum(cls, 'CODE_%d' % value, value, 'Unassigned')
273
277
  if 209 <= value <= 225:
@@ -94,7 +94,7 @@ class StatusCode(IntEnum):
94
94
  #: MIPV6-MESG-ID-REQD [:rfc:`4285`]
95
95
  MIPV6_MESG_ID_REQD = 145
96
96
 
97
- #: MIPV6-AUTH-FAIL [:rfc:`4285`]
97
+ #: MIPV6-AUTH-FAIL [:rfc:`4285`][RFC Errata 3463]
98
98
  MIPV6_AUTH_FAIL = 146
99
99
 
100
100
  #: Permanent home keygen token unavailable [:rfc:`4866`]
@@ -157,7 +157,8 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
157
157
 
158
158
  def _decode_next_layer(self, dict_: '_PT', proto: 'Optional[int]' = None, # pylint: disable=arguments-differ
159
159
  length: 'Optional[int]' = None, *, packet: 'Optional[dict[str, Any]]' = None,
160
- version: 'Literal[4, 6]' = 4, ipv6_exthdr: 'Optional[ProtoChain]' = None) -> '_PT':
160
+ version: 'Literal[4, 6]' = 4, ipv6_exthdr: 'Optional[ProtoChain]' = None,
161
+ payload: 'Optional[bytes]' = None) -> '_PT':
161
162
  r"""Decode next layer extractor.
162
163
 
163
164
  Arguments:
@@ -167,6 +168,8 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
167
168
  packet: packet info (passed from :meth:`self.unpack <pcapkit.protocols.protocol.Protocol.unpack>`)
168
169
  version: IP version
169
170
  ipv6_exthdr: protocol chain of IPv6 extension headers
171
+ payload: payload from packet. If not provided, will extract from
172
+ :meth:`self.__header__.get_payload <pcapkit.protocols.schema.schema.Schema.get_payload>`
170
173
 
171
174
  Returns:
172
175
  Current protocol with next layer extracted.
@@ -179,7 +182,8 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
179
182
 
180
183
  """
181
184
  next_ = cast('Protocol', # type: ignore[redundant-cast]
182
- self._import_next_layer(proto, length, packet=packet, version=version)) # type: ignore[arg-type,misc,call-arg]
185
+ self._import_next_layer(proto, length, packet=packet, version=version,
186
+ payload=payload)) # type: ignore[arg-type,misc,call-arg]
183
187
  info, chain = next_.info, next_.protochain
184
188
 
185
189
  # make next layer protocol name
@@ -203,8 +207,8 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
203
207
 
204
208
  @beholder # type: ignore[arg-type]
205
209
  def _import_next_layer(self, proto: 'int', length: 'Optional[int]' = None, *, # pylint: disable=arguments-differ
206
- packet: 'Optional[dict[str, Any]]' = None,
207
- version: 'Literal[4, 6]' = 4, extension: 'bool' = False) -> 'Protocol':
210
+ packet: 'Optional[dict[str, Any]]' = None, version: 'Literal[4, 6]' = 4,
211
+ extension: 'bool' = False, payload: 'Optional[bytes]' = None) -> 'Protocol':
208
212
  """Import next layer extractor.
209
213
 
210
214
  Arguments:
@@ -213,6 +217,8 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
213
217
  packet: packet info (passed from :meth:`self.unpack <pcapkit.protocols.protocol.Protocol.unpack>`)
214
218
  version: IP protocol version
215
219
  extension: if is extension header
220
+ payload: payload from packet. If not provided, will extract from
221
+ :meth:`self.__header__.get_payload <pcapkit.protocols.schema.schema.Schema.get_payload>`
216
222
 
217
223
  Returns:
218
224
  Instance of next layer.
@@ -221,7 +227,10 @@ class Internet(Protocol[_PT, _ST], Generic[_PT, _ST]): # pylint: disable=abstra
221
227
  if TYPE_CHECKING:
222
228
  protocol: 'Type[Protocol]'
223
229
 
224
- file_ = self.__header__.get_payload()
230
+ if payload is not None:
231
+ file_ = self.__header__.get_payload()
232
+ else:
233
+ file_ = payload
225
234
  if length is None:
226
235
  length = len(file_)
227
236
 
@@ -31,11 +31,13 @@ from typing import TYPE_CHECKING
31
31
 
32
32
  from pcapkit.const.ipv6.extension_header import ExtensionHeader as Enum_ExtensionHeader
33
33
  from pcapkit.const.reg.transtype import TransType as Enum_TransType
34
+ from pcapkit.corekit.module import ModuleDescriptor
34
35
  from pcapkit.corekit.multidict import OrderedMultiDict
35
36
  from pcapkit.corekit.protochain import ProtoChain
36
37
  from pcapkit.protocols.data.internet.ipv6 import IPv6 as Data_IPv6
37
38
  from pcapkit.protocols.internet.ip import IP
38
39
  from pcapkit.protocols.schema.internet.ipv6 import IPv6 as Schema_IPv6
40
+ from pcapkit.utilities.decorators import beholder
39
41
 
40
42
  if TYPE_CHECKING:
41
43
  from enum import IntEnum as StdlibEnum
@@ -46,7 +48,6 @@ if TYPE_CHECKING:
46
48
  from typing_extensions import Literal
47
49
 
48
50
  from pcapkit.protocols.protocol import ProtocolBase as Protocol
49
- from pcapkit.protocols.schema.schema import Schema
50
51
 
51
52
  __all__ = ['IPv6']
52
53
 
@@ -310,6 +311,7 @@ class IPv6(IP[Data_IPv6, Schema_IPv6],
310
311
  _protos = [] # ProtoChain buffer
311
312
 
312
313
  # traverse if next header is an extensive header
314
+ payload = self.__header__.get_payload()
313
315
  while True:
314
316
  try:
315
317
  ex_proto = Enum_ExtensionHeader(proto)
@@ -322,7 +324,8 @@ class IPv6(IP[Data_IPv6, Schema_IPv6],
322
324
  # break
323
325
 
324
326
  # make protocol name
325
- next_ = self._import_next_layer(proto, packet=packet, version=6, extension=True) # type: ignore[misc,call-arg,arg-type]
327
+ next_ = self._import_next_layer(proto, packet=packet, version=6, extension=True,
328
+ payload=payload) # type: ignore[misc,call-arg,arg-type]
326
329
  info = next_.info
327
330
  name = next_.alias.lstrip('IPv6-').lower()
328
331
  ipv6.__update__({
@@ -348,6 +351,9 @@ class IPv6(IP[Data_IPv6, Schema_IPv6],
348
351
  })
349
352
  break
350
353
 
354
+ # update payload for next extension header
355
+ payload = payload[next_.length:]
356
+
351
357
  # record real header & payload length (headers exclude)
352
358
  ipv6.__update__({
353
359
  'hdr_len': hdr_len,
@@ -358,4 +364,49 @@ class IPv6(IP[Data_IPv6, Schema_IPv6],
358
364
  })
359
365
 
360
366
  ipv6_exthdr = ProtoChain.from_list(_protos) # type: ignore[arg-type]
361
- return super()._decode_next_layer(ipv6, proto, raw_len, packet=packet, ipv6_exthdr=ipv6_exthdr)
367
+ return super()._decode_next_layer(ipv6, proto, raw_len, packet=packet, ipv6_exthdr=ipv6_exthdr, payload=payload)
368
+
369
+ @beholder # type: ignore[arg-type]
370
+ def _import_next_layer(self, proto: 'int', length: 'Optional[int]' = None, *, # pylint: disable=arguments-differ
371
+ packet: 'Optional[dict[str, Any]]' = None, version: 'Literal[4, 6]' = 4,
372
+ extension: 'bool' = False, payload: 'Optional[bytes]' = None) -> 'Protocol':
373
+ """Import next layer extractor.
374
+
375
+ Arguments:
376
+ proto: next layer protocol index
377
+ length: valid (*non-padding*) length
378
+ packet: packet info (passed from :meth:`self.unpack <pcapkit.protocols.protocol.Protocol.unpack>`)
379
+ version: IP protocol version
380
+ extension: if is extension header
381
+ payload: payload from packet. If not provided, will extract from
382
+ :meth:`self.__header__.get_payload <pcapkit.protocols.schema.schema.Schema.get_payload>`
383
+
384
+ Returns:
385
+ Instance of next layer.
386
+
387
+ """
388
+ if TYPE_CHECKING:
389
+ protocol: 'Type[Protocol]'
390
+
391
+ if payload is None:
392
+ file_ = self.__header__.get_payload()
393
+ else:
394
+ file_ = payload
395
+ if length is None:
396
+ length = len(file_)
397
+
398
+ if length == 0:
399
+ from pcapkit.protocols.misc.null import \
400
+ NoPayload as protocol # isort: skip # pylint: disable=import-outside-toplevel
401
+ elif self._sigterm:
402
+ from pcapkit.protocols.misc.raw import \
403
+ Raw as protocol # isort: skip # pylint: disable=import-outside-toplevel
404
+ else:
405
+ protocol = self.__proto__[proto] # type: ignore[assignment]
406
+ if isinstance(protocol, ModuleDescriptor):
407
+ protocol = protocol.klass # type: ignore[unreachable]
408
+ self.__proto__[proto] = protocol # update mapping upon import
409
+
410
+ next_ = protocol(file_, length, version=version, extension=extension, # type: ignore[abstract]
411
+ alias=proto, packet=packet, layer=self._exlayer, protocol=self._exproto)
412
+ return next_
@@ -48,14 +48,12 @@ from pcapkit.utilities.warnings import RegistryWarning, warn
48
48
  if TYPE_CHECKING:
49
49
  from enum import IntEnum as StdlibEnum
50
50
  from ipaddress import IPv6Address
51
- from typing import IO, Any, Callable, DefaultDict, NoReturn, Optional, Type
51
+ from typing import IO, Any, Callable, DefaultDict, Optional, Type
52
52
 
53
53
  from aenum import IntEnum as AenumEnum
54
54
  from mypy_extensions import DefaultArg, KwArg, NamedArg
55
55
  from typing_extensions import Literal
56
56
 
57
- from pcapkit.corekit.protochain import ProtoChain
58
- from pcapkit.protocols.protocol import ProtocolBase as Protocol
59
57
  from pcapkit.protocols.schema.internet.ipv6_route import RoutingType as Schema_RoutingType
60
58
 
61
59
  TypeParser = Callable[[Schema_RoutingType, NamedArg(Schema_IPv6_Route, 'header')], Data_IPv6_Route]
@@ -402,7 +400,7 @@ class IPv6_Route(Internet[Data_IPv6_Route, Schema_IPv6_Route],
402
400
  """
403
401
  ipv6_route = Data_UnknownType(
404
402
  next=header.next,
405
- length=header.length,
403
+ length=header.length * 8 + 8,
406
404
  type=header.type,
407
405
  seg_left=header.seg_left,
408
406
  data=schema.data,
@@ -463,7 +461,7 @@ class IPv6_Route(Internet[Data_IPv6_Route, Schema_IPv6_Route],
463
461
 
464
462
  ipv6_route = Data_SourceRoute(
465
463
  next=header.next,
466
- length=header.length,
464
+ length=header.length * 8 + 8,
467
465
  type=header.type,
468
466
  seg_left=header.seg_left,
469
467
  ip=tuple(schema.ip),
@@ -507,7 +505,7 @@ class IPv6_Route(Internet[Data_IPv6_Route, Schema_IPv6_Route],
507
505
 
508
506
  ipv6_route = Data_Type2(
509
507
  next=header.next,
510
- length=header.length,
508
+ length=header.length * 8 + 8,
511
509
  type=header.type,
512
510
  seg_left=header.seg_left,
513
511
  ip=schema.ip,
@@ -547,7 +545,7 @@ class IPv6_Route(Internet[Data_IPv6_Route, Schema_IPv6_Route],
547
545
 
548
546
  ipv6_route = Data_RPL(
549
547
  next=header.next,
550
- length=header.length,
548
+ length=header.length * 8 + 8,
551
549
  type=header.type,
552
550
  seg_left=header.seg_left,
553
551
  cmpr_i=schema.cmpr_i,
@@ -24,10 +24,9 @@ __all__ = [
24
24
 
25
25
  if TYPE_CHECKING:
26
26
  from ipaddress import IPv6Address
27
- from typing import Any, Optional
27
+ from typing import Any
28
28
 
29
29
  from pcapkit.corekit.fields.field import FieldBase as Field
30
- from pcapkit.protocols.protocol import ProtocolBase as Protocol
31
30
 
32
31
  if SPHINX_TYPE_CHECKING:
33
32
  from typing_extensions import TypedDict
@@ -52,7 +51,7 @@ def ipv6_route_data_selector(pkt: 'dict[str, Any]') -> 'Field':
52
51
  """
53
52
  type = cast('Enum_Routing', pkt['type'])
54
53
  schema = RoutingType.registry[type]
55
- return SchemaField(length=pkt['length'] * 8 - 4, schema=schema)
54
+ return SchemaField(length=pkt['length'] * 8, schema=schema)
56
55
 
57
56
 
58
57
  @schema_final
@@ -14,6 +14,7 @@ decorators, including :func:`~pcapkit.utilities.decorators.seekset`,
14
14
  import functools
15
15
  import io
16
16
  import os
17
+ import traceback
17
18
  from typing import TYPE_CHECKING, cast
18
19
 
19
20
  from pcapkit.utilities.exceptions import StructError, stacklevel
@@ -122,7 +123,11 @@ def beholder(func: 'Callable[Concatenate[Protocol, int, Optional[int], P], R_beh
122
123
  # error = traceback.format_exc(limit=1).strip().rsplit(os.linesep, maxsplit=1)[-1]
123
124
 
124
125
  # log error
125
- logger.warning(str(exc), exc_info=exc if VERBOSE else None, stack_info=DEVMODE, stacklevel=stacklevel())
126
+ logger.warning(str(exc), stack_info=DEVMODE, stacklevel=stacklevel())
127
+
128
+ if VERBOSE:
129
+ logger.error('The following error occurred while parsing the packet:')
130
+ traceback.print_exc()
126
131
 
127
132
  file_ = self.__header__.get_payload()
128
133
  next_ = protocol(file_, length, error=str(exc))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pypcapkit
3
- Version: 1.3.3.post1
3
+ Version: 1.3.4
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=HD-zEtr43yYqgsWyCw8_EmqXRzISF4l4ySB8EGb98wc,4097
1
+ pcapkit/__init__.py,sha256=VnyWkRLc-qNZGu3WDcBLGltHaB99O0IY5x3-tTDCBYM,4091
2
2
  pcapkit/__main__.py,sha256=G3rJrhCwkxlxOa04zwRJ4mq4G1k8JYWES3JnsaeMDe4,6415
3
3
  pcapkit/all.py,sha256=6G7rVFlajYk98F5vCYcLOw-CkXdEw4C2zAwnTgU0asU,6679
4
4
  pcapkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -8,7 +8,7 @@ pcapkit/const/arp/hardware.py,sha256=0VJr0oAyuX5LDWe-pnsaGISoYiqzK0JMql2khFU9tLg
8
8
  pcapkit/const/arp/operation.py,sha256=HfqBJaBAmhpulxMq0SqwOs59KSAF9-2eGQrqkOspSAU,3124
9
9
  pcapkit/const/ftp/__init__.py,sha256=ICFUj-uRyoMU7tOTUqPwE1tiKc9b71fLcbCgi9iPACs,936
10
10
  pcapkit/const/ftp/command.py,sha256=TD9lnr2neKI3rU2ZEhNLHS9fT5NMiPQXVpxeaGx5ML4,12361
11
- pcapkit/const/ftp/return_code.py,sha256=fA8bxXBf85nXmQYa4IT4CriCYnZ46zKt-eXCfhG9ico,11064
11
+ pcapkit/const/ftp/return_code.py,sha256=RCWgoATNecn8wplDXf4vDPBT9xTkxQFpFuNteoJpTTg,11076
12
12
  pcapkit/const/hip/__init__.py,sha256=cfC7fg9VhuoWAaeQQJ5x_EO1dA5TbscTdkr3jZ-Xluc,5583
13
13
  pcapkit/const/hip/certificate.py,sha256=00sHuIZ-tA3uAUlnSUgYSCl8tt5Lj-14Qb3CHpdm4Tc,2081
14
14
  pcapkit/const/hip/cipher.py,sha256=ZI0QnP_RPlPW7SQvUC3J-lk-b3kjdtbZLbUT8XUNJNc,1695
@@ -33,7 +33,7 @@ pcapkit/const/http/error_code.py,sha256=caVfNqmyXCGeLqbi8NSo45SBjp263E7pgoW9ENRO
33
33
  pcapkit/const/http/frame.py,sha256=4l8Uqk9PYfsmki51fYAliaK7rSpTZv-sJNrJNMfmO9w,2555
34
34
  pcapkit/const/http/method.py,sha256=x-7zi1JTrKyX6A84Eg1omsIG9RcBMPR8DDs97YWOQ6c,5011
35
35
  pcapkit/const/http/setting.py,sha256=Y6iPP1dP9yXzVU-3wERqIKi7ClnI2nht9Uogt4IcR4Y,3148
36
- pcapkit/const/http/status_code.py,sha256=Lj0XrPA4wN4e6PYoV9HYSIBrLawnAkLrb9TVAqen1Yk,8755
36
+ pcapkit/const/http/status_code.py,sha256=blnXu5uqkVJPpUAkjGnVaz0U0w45tUdjS2KoKBmihmE,8945
37
37
  pcapkit/const/ipv4/__init__.py,sha256=YSYTPDXlnQHsMsSpIzNIXN0Fdios7-w3dso2Qt6MK38,3089
38
38
  pcapkit/const/ipv4/classification_level.py,sha256=O5JyxOU_CPWzamy2pNnFBE8ALyUnUTcnX-iIKJEQXR8,1882
39
39
  pcapkit/const/ipv4/option_class.py,sha256=apHy6yQZbd--dak5gpfGKk27csuXBrY_nPkZSUpPIMQ,1527
@@ -101,7 +101,7 @@ pcapkit/const/mh/packet.py,sha256=OnB_U5liLxwsmQ5ZNOPDx-l_HPcmOSGdwobd0dAl1Xo,33
101
101
  pcapkit/const/mh/qos_attribute.py,sha256=-YHKRTHMAI_c8AYK39FMXfaa7JizOhd47b3QjePHgjM,2638
102
102
  pcapkit/const/mh/revocation_status_code.py,sha256=F7I3tLxkR7ZZ6vc8KFVVO-ZBwCCcwlJ4-vse37GPeWU,2773
103
103
  pcapkit/const/mh/revocation_trigger.py,sha256=P_Reof4Jn1-nYaEZTJxAWn_1GDCuGXyT5XpzFOrB4w8,2831
104
- pcapkit/const/mh/status_code.py,sha256=koYTmxSGRONuKDvytjg4Ovmzcm04fccMPr2cQ_424NE,7061
104
+ pcapkit/const/mh/status_code.py,sha256=DtX5dTUW9fcR4nain4GqWFotuZ6Y4XAabVKgUD-GSIs,7078
105
105
  pcapkit/const/mh/traffic_selector.py,sha256=el5PbvzoUemEOAKWHgXY6F8faE0UvYpQHkdLmLmpWtM,1991
106
106
  pcapkit/const/mh/upa_status.py,sha256=hRv2rmuSU9hO2xRXdH63NgixwgDdULor5nu78FP_dmg,2409
107
107
  pcapkit/const/mh/upn_reason.py,sha256=lK3Et2-mhj9vXsO_IYXv-btdNZYm4h3LR-neFe2ktDw,2499
@@ -241,14 +241,14 @@ pcapkit/protocols/internet/__init__.py,sha256=92A7PPTi_YYjGvns_aRKaBq2uhRMDc_6bk
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=dF3vYoUq_4DNAmKm2sC7HQ5t55AR0Gj9XjyMrrOlYiA,11297
244
+ pcapkit/protocols/internet/internet.py,sha256=dl3hl2iEI4v9SfI-3iu4CBfoUZksRk7E5vAfX4yW4vI,11898
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
248
- pcapkit/protocols/internet/ipv6.py,sha256=n1t_obpJwUYWxzZA7fs54ozipemLgRexkKXIaycTR_c,13653
248
+ pcapkit/protocols/internet/ipv6.py,sha256=DMy2WHaXzq87bFD716aT9PI2FCmHU3E5V07KDIfbhg8,15996
249
249
  pcapkit/protocols/internet/ipv6_frag.py,sha256=hVS_-596hx90-mUNerhcfwhExdX9wdG6j6E4qeO04eY,9389
250
250
  pcapkit/protocols/internet/ipv6_opts.py,sha256=FQTg04w4d3iKFqlyK2EmNAkuOEcFUMo0i-zt5spxycw,76104
251
- pcapkit/protocols/internet/ipv6_route.py,sha256=X8mpCl6Lbt_fctfSEJEe_iHWWLAOoBAmVAx8Vo07610,29715
251
+ pcapkit/protocols/internet/ipv6_route.py,sha256=IUpVB6M-mDc3acnpkBJzatr5tVBwkj_alJVmEhVElbk,29615
252
252
  pcapkit/protocols/internet/ipx.py,sha256=a6SinNMJ5XDttNtn7Ii9H8HNC2-_-w_VuBr4RKSYNm0,7812
253
253
  pcapkit/protocols/internet/mh.py,sha256=ZINPkkqXp15ZGRuazTk-FXewopxqhourZ2eKdzRSreo,114047
254
254
  pcapkit/protocols/internet/NotImplemented/ecn.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -292,7 +292,7 @@ pcapkit/protocols/schema/internet/ipv4.py,sha256=us04bxCJ3SJytV65GvxYF79A1gHH3aG
292
292
  pcapkit/protocols/schema/internet/ipv6.py,sha256=zLtUfBoWwgoKUtojTdWqIceZwPcKBJshdW57GLZtW5g,2045
293
293
  pcapkit/protocols/schema/internet/ipv6_frag.py,sha256=Zewv7Bau3m3DDIja9G9ko_WYMmKo3m1d-DzrQ2jOQ7o,1434
294
294
  pcapkit/protocols/schema/internet/ipv6_opts.py,sha256=M-h3DM_PStbUK2FhHP7UoHiza0AdGh5wI8F5w5jXRlg,21504
295
- pcapkit/protocols/schema/internet/ipv6_route.py,sha256=lh-i7i7JEVp7raP3OJc6sUSu5FI1qbe-N5ILCHPzkT4,6272
295
+ pcapkit/protocols/schema/internet/ipv6_route.py,sha256=lYcwnTN-rGpJwVEGFEClhWf5EVGbJ3_tOF-ga-IOIJI,6190
296
296
  pcapkit/protocols/schema/internet/ipx.py,sha256=RWWMrnXZiruLocpc2BGC7iKQ3qt7GImz72LJzXRr43M,1377
297
297
  pcapkit/protocols/schema/internet/mh.py,sha256=s_S76GUpNP3NwbU1gq9aPg1y8k6KJ7BV0A-LuhNOuss,24920
298
298
  pcapkit/protocols/schema/link/__init__.py,sha256=xdkvznfriNEjzOEMWVfTuEv1sMnKJMOSDADgG78RCNg,644
@@ -326,7 +326,7 @@ pcapkit/toolkit/pyshark.py,sha256=37KdzGls8b8aI7d-MHS9k0QQbo9Gm1sRDth-eLKVToA,33
326
326
  pcapkit/toolkit/scapy.py,sha256=L-rmqDWgTjHOH_MiqcwtYXhaPm3pzGc0kh1IUzNyzkI,11445
327
327
  pcapkit/utilities/__init__.py,sha256=nd_SO3k9zXgi-Vesa1bhBiAgu55x2BeRMclLsdz9RWg,692
328
328
  pcapkit/utilities/compat.py,sha256=fq16iG0leV4cyglNn2GeXdIIwUVzwMXGtdPigrejrgo,6533
329
- pcapkit/utilities/decorators.py,sha256=ZzWyk-l3jyEYbqpdB1YLo5YYcJs0UZ7g3vOMs7OXuzU,7101
329
+ pcapkit/utilities/decorators.py,sha256=zUmoTISPCy6oKaUJt2OlcKYJ2CTOapw9o1r1RkDZnV8,7233
330
330
  pcapkit/utilities/exceptions.py,sha256=2T2KvTXfzfs2iGuRkbczq_0zTN9jpwhrV-_8ULikP_M,11092
331
331
  pcapkit/utilities/logging.py,sha256=-QAMfEfoWO17FwZoPHYN_2RL8tp8HlJNwbdu3eJXMfE,1935
332
332
  pcapkit/utilities/warnings.py,sha256=2b8IXVIWLHb8DBsMFdiBF87kaVp1y1ELxbHYpm2zD2s,5068
@@ -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.3.post1.dist-info/LICENSE,sha256=KkKND5E2e1Z6CQvSLPc1lRBy4xPRed41AG6q1txotWk,1516
462
- pypcapkit-1.3.3.post1.dist-info/METADATA,sha256=wApFlgF9eKzopTSGHOYkmFyDQK5DqAACKISns14Rc44,7704
463
- pypcapkit-1.3.3.post1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
464
- pypcapkit-1.3.3.post1.dist-info/entry_points.txt,sha256=8tVaZ-N0S2t19ELoTEGq_OlC8-dSmd7dvNn-kMV3afY,100
465
- pypcapkit-1.3.3.post1.dist-info/top_level.txt,sha256=KEssKRhG9ln3EOfGH-yi98HgI-MM9hOHy09QQP-fvk8,8
466
- pypcapkit-1.3.3.post1.dist-info/RECORD,,
461
+ pypcapkit-1.3.4.dist-info/LICENSE,sha256=KkKND5E2e1Z6CQvSLPc1lRBy4xPRed41AG6q1txotWk,1516
462
+ pypcapkit-1.3.4.dist-info/METADATA,sha256=aFrfnTXGkfceooOyJrA0cpAf1jPDmP9eyfW3jsSaPTA,7698
463
+ pypcapkit-1.3.4.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
464
+ pypcapkit-1.3.4.dist-info/entry_points.txt,sha256=8tVaZ-N0S2t19ELoTEGq_OlC8-dSmd7dvNn-kMV3afY,100
465
+ pypcapkit-1.3.4.dist-info/top_level.txt,sha256=KEssKRhG9ln3EOfGH-yi98HgI-MM9hOHy09QQP-fvk8,8
466
+ pypcapkit-1.3.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5