pypcapkit 1.1.0.post1__cp311-none-any.whl → 1.1.1__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 +1 -1
- pcapkit/const/reg/apptype.py +24 -11
- pcapkit/corekit/fields/collections.py +1 -1
- pcapkit/corekit/infoclass.py +1 -1
- pcapkit/dumpkit/common.py +2 -1
- pcapkit/foundation/extraction.py +47 -19
- pcapkit/foundation/reassembly/data/ip.py +2 -2
- pcapkit/foundation/reassembly/data/tcp.py +2 -2
- pcapkit/foundation/traceflow/data/tcp.py +2 -1
- pcapkit/foundation/traceflow/tcp.py +4 -1
- pcapkit/interface/core.py +2 -9
- pcapkit/protocols/application/http.py +3 -3
- pcapkit/protocols/application/httpv1.py +2 -2
- pcapkit/protocols/protocol.py +1 -10
- pcapkit/protocols/schema/schema.py +16 -13
- pcapkit/protocols/schema/transport/tcp.py +8 -0
- pcapkit/toolkit/pcap.py +4 -4
- pcapkit/toolkit/pcapng.py +4 -4
- pcapkit/utilities/compat.py +11 -4
- pcapkit/vendor/reg/apptype.py +8 -8
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/METADATA +11 -11
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/RECORD +26 -26
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/WHEEL +1 -1
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/LICENSE +0 -0
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/entry_points.txt +0 -0
- {pypcapkit-1.1.0.post1.dist-info → pypcapkit-1.1.1.dist-info}/top_level.txt +0 -0
pcapkit/__init__.py
CHANGED
pcapkit/const/reg/apptype.py
CHANGED
@@ -93,28 +93,28 @@ class AppType(StrEnum):
|
|
93
93
|
return '%s [%d - %s]' % (self.svc, self.port, self.proto.name)
|
94
94
|
|
95
95
|
def __int__(self) -> 'int':
|
96
|
-
return self.
|
96
|
+
return self.port
|
97
97
|
|
98
98
|
def __lt__(self, other: 'AppType') -> 'bool':
|
99
|
-
return self.
|
99
|
+
return self.port < other
|
100
100
|
|
101
101
|
def __gt__(self, other: 'AppType') -> 'bool':
|
102
|
-
return self.
|
102
|
+
return self.port > other
|
103
103
|
|
104
104
|
def __le__(self, other: 'AppType') -> 'bool':
|
105
|
-
return self.
|
105
|
+
return self.port <= other
|
106
106
|
|
107
107
|
def __ge__(self, other: 'AppType') -> 'bool':
|
108
|
-
return self.
|
108
|
+
return self.port >= other
|
109
109
|
|
110
110
|
def __eq__(self, other: 'Any') -> 'bool':
|
111
|
-
return self.
|
111
|
+
return self.port == other
|
112
112
|
|
113
113
|
def __ne__(self, other: 'Any') -> 'bool':
|
114
|
-
return self.
|
114
|
+
return self.port != other
|
115
115
|
|
116
116
|
def __hash__(self) -> 'int':
|
117
|
-
return hash(self.
|
117
|
+
return hash(self.port)
|
118
118
|
|
119
119
|
#: - [TCP] Reserved
|
120
120
|
#: - [UDP] Reserved
|
@@ -22916,6 +22916,15 @@ class AppType(StrEnum):
|
|
22916
22916
|
#: [UDP] Port for copy discovery
|
22917
22917
|
copy_disc: 'AppType' = 8445, 'copy-disc', TransportProtocol.get('udp')
|
22918
22918
|
|
22919
|
+
#: [TCP] Matrix Federation Protocol
|
22920
|
+
matrix_fed: 'AppType' = 8448, 'matrix-fed', TransportProtocol.get('tcp')
|
22921
|
+
|
22922
|
+
#: [UDP] Reserved
|
22923
|
+
reserved_8448: 'AppType' = 8448, 'reserved', TransportProtocol.get('udp')
|
22924
|
+
|
22925
|
+
#: [N/A] Unassigned
|
22926
|
+
unassigned_8449: 'AppType' = 8449, 'unassigned', TransportProtocol.get('undefined')
|
22927
|
+
|
22919
22928
|
#: - [TCP] npmp
|
22920
22929
|
#: - [UDP] npmp
|
22921
22930
|
npmp: 'AppType' = 8450, 'npmp', TransportProtocol.get('tcp') | TransportProtocol.get('udp')
|
@@ -28679,8 +28688,9 @@ class AppType(StrEnum):
|
|
28679
28688
|
#: [TCP] Topology Discovery
|
28680
28689
|
kiwin: 'AppType' = -1, 'kiwin', TransportProtocol.get('tcp')
|
28681
28690
|
|
28682
|
-
#: [
|
28683
|
-
|
28691
|
+
#: - [TCP] KNX Discovery Protocol
|
28692
|
+
#: - [UDP] Discovery in KNX IoT Point API
|
28693
|
+
knx: 'AppType' = -1, 'knx', TransportProtocol.get('tcp') | TransportProtocol.get('udp')
|
28684
28694
|
|
28685
28695
|
#: [N/A] Kabira Transaction Platform
|
28686
28696
|
ktp: 'AppType' = -1, 'ktp', TransportProtocol.get('undefined')
|
@@ -28866,6 +28876,9 @@ class AppType(StrEnum):
|
|
28866
28876
|
#: [N/A] Mental Ray for Maya
|
28867
28877
|
mi_raysat: 'AppType' = -1, 'mi-raysat', TransportProtocol.get('undefined')
|
28868
28878
|
|
28879
|
+
#: [TCP] A protocol for controlling a microscope
|
28880
|
+
microdeep: 'AppType' = -1, 'microdeep', TransportProtocol.get('tcp')
|
28881
|
+
|
28869
28882
|
#: [TCP] Protocol for connected accessories
|
28870
28883
|
mieleacs: 'AppType' = -1, 'mieleacs', TransportProtocol.get('tcp')
|
28871
28884
|
|
@@ -31312,7 +31325,7 @@ class AppType(StrEnum):
|
|
31312
31325
|
if 8434 <= value <= 8441:
|
31313
31326
|
#: [N/A] Unassigned
|
31314
31327
|
return extend_enum(cls, 'unassigned_%d' % value, value, 'unassigned', TransportProtocol.get('undefined'))
|
31315
|
-
if 8446 <= value <=
|
31328
|
+
if 8446 <= value <= 8447:
|
31316
31329
|
#: [N/A] Unassigned
|
31317
31330
|
return extend_enum(cls, 'unassigned_%d' % value, value, 'unassigned', TransportProtocol.get('undefined'))
|
31318
31331
|
if 8451 <= value <= 8456:
|
@@ -115,7 +115,7 @@ class ListField(_Field[List[_TL]], Generic[_TL]):
|
|
115
115
|
raise FieldValueError(f'Field {self.name} has invalid value.')
|
116
116
|
return b''.join(temp)
|
117
117
|
|
118
|
-
def unpack(self, buffer: 'bytes | IO[bytes]', packet: 'dict[str, Any]') -> 'bytes | list[_TL]':
|
118
|
+
def unpack(self, buffer: 'bytes | IO[bytes]', packet: 'dict[str, Any]') -> 'bytes | list[_TL]':
|
119
119
|
"""Unpack field value from :obj:`bytes`.
|
120
120
|
|
121
121
|
Args:
|
pcapkit/corekit/infoclass.py
CHANGED
@@ -318,7 +318,7 @@ class Info(Mapping[str, VT], Generic[VT], metaclass=InfoMeta):
|
|
318
318
|
else:
|
319
319
|
temp.append(f'{out_key}={value!r}')
|
320
320
|
args = ', '.join(temp)
|
321
|
-
return f'{type(self).__name__}
|
321
|
+
return f'<{type(self).__name__} {args}>'
|
322
322
|
|
323
323
|
def __len__(self) -> 'int':
|
324
324
|
return len(self.__dict__)
|
pcapkit/dumpkit/common.py
CHANGED
@@ -21,6 +21,7 @@ import aenum
|
|
21
21
|
|
22
22
|
from pcapkit.corekit.infoclass import Info
|
23
23
|
from pcapkit.corekit.multidict import MultiDict, OrderedMultiDict
|
24
|
+
from pcapkit.protocols.schema.schema import Schema
|
24
25
|
from pcapkit.utilities.logging import logger
|
25
26
|
|
26
27
|
__all__ = ['make_dumper']
|
@@ -60,7 +61,7 @@ def make_dumper(output: 'Type[Dumper]') -> 'Type[Dumper]':
|
|
60
61
|
return str(o)
|
61
62
|
if isinstance(o, datetime.timedelta):
|
62
63
|
return o.total_seconds()
|
63
|
-
if isinstance(o, Info):
|
64
|
+
if isinstance(o, (Info, Schema)):
|
64
65
|
return o.to_dict()
|
65
66
|
if isinstance(o, (ipaddress.IPv4Address, ipaddress.IPv6Address)):
|
66
67
|
return str(o)
|
pcapkit/foundation/extraction.py
CHANGED
@@ -24,9 +24,12 @@ from pcapkit.dumpkit.common import make_dumper
|
|
24
24
|
from pcapkit.foundation.engines.pcap import PCAP as PCAP_Engine
|
25
25
|
from pcapkit.foundation.engines.pcapng import PCAPNG as PCAPNG_Engine
|
26
26
|
from pcapkit.foundation.reassembly import ReassemblyManager
|
27
|
+
from pcapkit.foundation.reassembly.data import ReassemblyData
|
27
28
|
from pcapkit.foundation.traceflow import TraceFlowManager
|
29
|
+
from pcapkit.foundation.traceflow.data import TraceFlowData
|
28
30
|
from pcapkit.utilities.exceptions import (CallableError, FileNotFound, FormatError, IterableError,
|
29
31
|
UnsupportedCall, stacklevel)
|
32
|
+
from pcapkit.utilities.logging import logger
|
30
33
|
from pcapkit.utilities.warnings import EngineWarning, FormatWarning, warn
|
31
34
|
|
32
35
|
if TYPE_CHECKING:
|
@@ -40,8 +43,6 @@ if TYPE_CHECKING:
|
|
40
43
|
from typing_extensions import Literal
|
41
44
|
|
42
45
|
from pcapkit.foundation.engines.engine import Engine
|
43
|
-
from pcapkit.foundation.reassembly.data import ReassemblyData
|
44
|
-
from pcapkit.foundation.traceflow.data import TraceFlowData
|
45
46
|
from pcapkit.protocols.misc.pcap.frame import Frame
|
46
47
|
from pcapkit.protocols.misc.pcapng import PCAPNG
|
47
48
|
from pcapkit.protocols.protocol import Protocol
|
@@ -208,7 +209,7 @@ class Extractor(Generic[P]):
|
|
208
209
|
|
209
210
|
Raises:
|
210
211
|
UnsupportedCall: If :attr:`self._flag_d <pcapkit.foundation.extraction.Extractor._flag_d>`
|
211
|
-
is :data:`
|
212
|
+
is :data:`False`, as storing frame data is disabled.
|
212
213
|
|
213
214
|
"""
|
214
215
|
if self._flag_d:
|
@@ -219,25 +220,41 @@ class Extractor(Generic[P]):
|
|
219
220
|
def reassembly(self) -> 'ReassemblyData':
|
220
221
|
"""Frame record for reassembly.
|
221
222
|
|
222
|
-
* ``ipv4`` -- tuple of
|
223
|
-
* ``ipv6`` -- tuple of
|
223
|
+
* ``ipv4`` -- tuple of IPv4 payload fragment (:term:`reasm.ipv4.datagram`)
|
224
|
+
* ``ipv6`` -- tuple of IPv6 payload fragment (:term:`reasm.ipv6.datagram`)
|
224
225
|
* ``tcp`` -- tuple of TCP payload fragment (:term:`reasm.tcp.datagram`)
|
225
226
|
|
227
|
+
Raises:
|
228
|
+
UnsupportedCall: If :attr:`self._flag_r <pcapkit.foundation.extraction.Extractor._flag_r>`
|
229
|
+
is :data:`False`, as reassembly is disabled.
|
230
|
+
|
226
231
|
"""
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
232
|
+
if self._flag_r:
|
233
|
+
data = ReassemblyData(
|
234
|
+
ipv4=tuple(self._reasm.ipv4.datagram) if self._ipv4 else None,
|
235
|
+
ipv6=tuple(self._reasm.ipv6.datagram) if self._ipv6 else None,
|
236
|
+
tcp=tuple(self._reasm.tcp.datagram) if self._tcp else None,
|
237
|
+
)
|
238
|
+
return data
|
239
|
+
raise UnsupportedCall("'Extractor(reassembly=False)' object has no attribute 'reassembly'")
|
233
240
|
|
234
241
|
@property
|
235
242
|
def trace(self) -> 'TraceFlowData':
|
236
|
-
"""Index table for traced flow.
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
243
|
+
"""Index table for traced flow.
|
244
|
+
|
245
|
+
* ``tcp`` -- tuple of TCP flows (:term:`trace.tcp.index`)
|
246
|
+
|
247
|
+
Raises:
|
248
|
+
UnsupportedCall: If :attr:`self._flag_t <pcapkit.foundation.extraction.Extractor._flag_t>`
|
249
|
+
is :data:`False`, as flow tracing is disabled.
|
250
|
+
|
251
|
+
"""
|
252
|
+
if self._flag_t:
|
253
|
+
data = TraceFlowData(
|
254
|
+
tcp=tuple(self._trace.tcp.index) if self._tcp else None,
|
255
|
+
)
|
256
|
+
return data
|
257
|
+
raise UnsupportedCall("'Extractor(trace=False)' object has no attribute 'trace'")
|
241
258
|
|
242
259
|
@property
|
243
260
|
def engine(self) -> 'Engine':
|
@@ -536,10 +553,11 @@ class Extractor(Generic[P]):
|
|
536
553
|
trace_byteorder: output file byte order
|
537
554
|
trace_nanosecond: output nanosecond-resolution file flag
|
538
555
|
|
539
|
-
ip: if record data for IPv4 & IPv6 reassembly
|
540
|
-
ipv4: if perform IPv4 reassembly
|
541
|
-
ipv6: if perform IPv6 reassembly
|
556
|
+
ip: if record data for IPv4 & IPv6 reassembly (must be used with ``reassembly=True``)
|
557
|
+
ipv4: if perform IPv4 reassembly (must be used with ``reassembly=True``)
|
558
|
+
ipv6: if perform IPv6 reassembly (must be used with ``reassembly=True``)
|
542
559
|
tcp: if perform TCP reassembly and/or flow tracing
|
560
|
+
(must be used with ``reassembly=True`` or ``trace=True``)
|
543
561
|
|
544
562
|
Warns:
|
545
563
|
FormatWarning: Warns under following circumstances:
|
@@ -599,6 +617,13 @@ class Extractor(Generic[P]):
|
|
599
617
|
from pcapkit.foundation.reassembly.ipv6 import IPv6 as IPv6_Reassembly
|
600
618
|
from pcapkit.foundation.reassembly.tcp import TCP as TCP_Reassembly
|
601
619
|
|
620
|
+
if self._ipv4:
|
621
|
+
logger.info('IPv4 reassembly enabled')
|
622
|
+
if self._ipv6:
|
623
|
+
logger.info('IPv6 reassembly enabled')
|
624
|
+
if self._tcp:
|
625
|
+
logger.info('TCP reassembly enabled')
|
626
|
+
|
602
627
|
self._reasm = ReassemblyManager(
|
603
628
|
ipv4=IPv4_Reassembly(strict=strict) if self._ipv4 else None,
|
604
629
|
ipv6=IPv6_Reassembly(strict=strict) if self._ipv6 else None,
|
@@ -613,6 +638,9 @@ class Extractor(Generic[P]):
|
|
613
638
|
"using 'trace_format=None' instead", FormatWarning, stacklevel=stacklevel())
|
614
639
|
trace_format = None
|
615
640
|
|
641
|
+
if self._tcp:
|
642
|
+
logger.info('TCP flow tracing enabled')
|
643
|
+
|
616
644
|
self._trace = TraceFlowManager(
|
617
645
|
tcp=TCP_TraceFlow(fout=trace_fout, format=trace_format, byteorder=trace_byteorder,
|
618
646
|
nanosecond=trace_nanosecond) if self._tcp else None,
|
@@ -14,7 +14,7 @@ if TYPE_CHECKING:
|
|
14
14
|
from ipaddress import IPv4Address, IPv6Address
|
15
15
|
from typing import Optional, overload
|
16
16
|
|
17
|
-
from typing_extensions import Literal
|
17
|
+
from typing_extensions import Literal, TypeAlias
|
18
18
|
|
19
19
|
from pcapkit.const.reg.transtype import TransType
|
20
20
|
from pcapkit.protocols.protocol import Protocol
|
@@ -22,7 +22,7 @@ if TYPE_CHECKING:
|
|
22
22
|
AT = TypeVar('AT', 'IPv4Address', 'IPv6Address')
|
23
23
|
|
24
24
|
#: Buffer ID.
|
25
|
-
BufferID = Tuple[AT, AT, int, 'TransType']
|
25
|
+
BufferID: 'TypeAlias' = Tuple[AT, AT, int, 'TransType']
|
26
26
|
|
27
27
|
|
28
28
|
@info_final
|
@@ -15,14 +15,14 @@ if TYPE_CHECKING:
|
|
15
15
|
from ipaddress import IPv4Address, IPv6Address
|
16
16
|
from typing import Optional, overload
|
17
17
|
|
18
|
-
from typing_extensions import Literal
|
18
|
+
from typing_extensions import Literal, TypeAlias
|
19
19
|
|
20
20
|
from pcapkit.protocols.protocol import Protocol
|
21
21
|
|
22
22
|
IPAddress = TypeVar('IPAddress', 'IPv4Address', 'IPv6Address')
|
23
23
|
|
24
24
|
#: Buffer ID.
|
25
|
-
BufferID = Tuple[IPAddress, int, IPAddress, int]
|
25
|
+
BufferID: 'TypeAlias' = Tuple[IPAddress, int, IPAddress, int]
|
26
26
|
|
27
27
|
|
28
28
|
@info_final
|
@@ -13,6 +13,7 @@ if TYPE_CHECKING:
|
|
13
13
|
from typing import Any, Optional
|
14
14
|
|
15
15
|
from dictdumper.dumper import Dumper
|
16
|
+
from typing_extensions import TypeAlias
|
16
17
|
|
17
18
|
from pcapkit.const.reg.linktype import LinkType as Enum_LinkType
|
18
19
|
from pcapkit.protocols.data.misc.pcap.frame import Frame as Data_Frame
|
@@ -20,7 +21,7 @@ if TYPE_CHECKING:
|
|
20
21
|
IPAddress = TypeVar('IPAddress', 'IPv4Address', 'IPv6Address')
|
21
22
|
|
22
23
|
#: Buffer ID.
|
23
|
-
BufferID = Tuple[IPAddress, int, IPAddress, int]
|
24
|
+
BufferID: 'TypeAlias' = Tuple[IPAddress, int, IPAddress, int]
|
24
25
|
|
25
26
|
|
26
27
|
@info_final
|
@@ -111,7 +111,10 @@ class TCP(TraceFlow[BufferID, Buffer, Index, Packet[IPAddress]], Generic[IPAddre
|
|
111
111
|
|
112
112
|
# initialise buffer with BUFID
|
113
113
|
if BUFID not in self._buffer:
|
114
|
-
|
114
|
+
if packet.src.version == 4:
|
115
|
+
label = f'{packet.src}_{packet.srcport}-{packet.dst}_{packet.dstport}-{packet.timestamp}'
|
116
|
+
else:
|
117
|
+
label = f'{packet.src}_{packet.srcport}-{packet.dst}_{packet.dstport}-{packet.timestamp}'.replace(':', '.')
|
115
118
|
self._buffer[BUFID] = Buffer(
|
116
119
|
fpout=self._foutio(fname=f'{self._fproot}/{label}{self._fdpext or ""}', protocol=packet.protocol,
|
117
120
|
byteorder=self._endian, nanosecond=self._nnsecd),
|
pcapkit/interface/core.py
CHANGED
@@ -21,20 +21,13 @@ from pcapkit.protocols.protocol import Protocol
|
|
21
21
|
from pcapkit.utilities.exceptions import FormatError
|
22
22
|
|
23
23
|
if TYPE_CHECKING:
|
24
|
-
from typing import
|
24
|
+
from typing import Optional, Type
|
25
25
|
|
26
26
|
from typing_extensions import Literal
|
27
27
|
|
28
|
+
from pcapkit.foundation.extraction import Engines, Formats, Layers, Protocols, VerboseHandler
|
28
29
|
from pcapkit.foundation.reassembly.reassembly import Reassembly
|
29
30
|
from pcapkit.foundation.traceflow.traceflow import TraceFlow
|
30
|
-
from pcapkit.protocols.misc.pcap.frame import Frame
|
31
|
-
|
32
|
-
Formats = Literal['pcap', 'json', 'tree', 'plist']
|
33
|
-
Engines = Literal['default', 'pcapkit', 'dpkt', 'scapy', 'pyshark']
|
34
|
-
Layers = Literal['link', 'internet', 'transport', 'application', 'none']
|
35
|
-
|
36
|
-
Protocols = Union[str, Protocol, Type[Protocol]]
|
37
|
-
VerboseHandler = Callable[['Extractor', Frame], Any]
|
38
31
|
|
39
32
|
__all__ = [
|
40
33
|
'extract', 'reassemble', 'trace', # interface functions
|
@@ -96,7 +96,7 @@ class HTTP(Application[PT, ST], Generic[PT, ST]):
|
|
96
96
|
if version == 1:
|
97
97
|
from pcapkit.protocols.application.httpv1 import HTTP as protocol # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
|
98
98
|
elif version == 2:
|
99
|
-
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[
|
99
|
+
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[assignment] # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
|
100
100
|
else:
|
101
101
|
raise ProtocolError(f"invalid HTTP version: {version}")
|
102
102
|
|
@@ -123,7 +123,7 @@ class HTTP(Application[PT, ST], Generic[PT, ST]):
|
|
123
123
|
if version == 1:
|
124
124
|
from pcapkit.protocols.application.httpv1 import HTTP as protocol # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
|
125
125
|
elif version == 2:
|
126
|
-
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[
|
126
|
+
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[assignment] # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
|
127
127
|
else:
|
128
128
|
raise ProtocolError(f"invalid HTTP version: {version}")
|
129
129
|
return protocol.make(**kwargs) # type: ignore[return-value]
|
@@ -147,7 +147,7 @@ class HTTP(Application[PT, ST], Generic[PT, ST]):
|
|
147
147
|
if version == 1:
|
148
148
|
from pcapkit.protocols.application.httpv1 import HTTP as protocol
|
149
149
|
elif version == 2:
|
150
|
-
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[
|
150
|
+
from pcapkit.protocols.application.httpv2 import HTTP as protocol # type: ignore[assignment] # isort: skip
|
151
151
|
else:
|
152
152
|
raise ProtocolError(f"invalid HTTP version: {version}")
|
153
153
|
return protocol._make_data(data) # type: ignore[arg-type]
|
@@ -282,14 +282,14 @@ class HTTP(HTTPBase[Data_HTTP, Schema_HTTP],
|
|
282
282
|
match4 = re.match(_RE_STATUS, para2)
|
283
283
|
if match1 and match2:
|
284
284
|
header_line = Data_RequestHeader(
|
285
|
-
type=Type.REQUEST,
|
285
|
+
type=Type.REQUEST,
|
286
286
|
method=Enum_Method.get(self.decode(para1)),
|
287
287
|
uri=self.decode(para2),
|
288
288
|
version=self.decode(match2.group('version')),
|
289
289
|
)
|
290
290
|
elif match3 and match4:
|
291
291
|
header_line = Data_ResponseHeader(
|
292
|
-
type=Type.RESPONSE,
|
292
|
+
type=Type.RESPONSE,
|
293
293
|
version=self.decode(match3.group('version')),
|
294
294
|
status=Enum_StatusCode.get(int(para2)),
|
295
295
|
message=self.decode(para3),
|
pcapkit/protocols/protocol.py
CHANGED
@@ -571,17 +571,8 @@ class Protocol(Generic[PT, ST], metaclass=abc.ABCMeta):
|
|
571
571
|
if (cached := self.__cached__.get('__repr__')) is not None:
|
572
572
|
return cached
|
573
573
|
|
574
|
-
name = type(self).__name__
|
575
|
-
temp = [] # type: list[str]
|
576
|
-
for (key, value) in self._info.items():
|
577
|
-
if isinstance(value, Info):
|
578
|
-
temp.append(f'{key}=...')
|
579
|
-
else:
|
580
|
-
temp.append(f'{key}={value!r}')
|
581
|
-
args = ', '.join(temp)
|
582
|
-
|
583
574
|
# cache and return
|
584
|
-
repr_ = f'<{
|
575
|
+
repr_ = f'<{self.alias} {self.info_name}={self._info!r}>'
|
585
576
|
|
586
577
|
self.__cached__['__repr__'] = repr_
|
587
578
|
return repr_
|
@@ -678,7 +678,7 @@ class Schema(Mapping[str, VT], Generic[VT], metaclass=SchemaMeta):
|
|
678
678
|
return self
|
679
679
|
|
680
680
|
|
681
|
-
class EnumMeta(SchemaMeta):
|
681
|
+
class EnumMeta(SchemaMeta, Generic[ET]):
|
682
682
|
"""Meta class to add dynamic support for :class:`EnumSchema`.
|
683
683
|
|
684
684
|
This meta class is used to generate necessary attributes for the
|
@@ -687,7 +687,7 @@ class EnumMeta(SchemaMeta):
|
|
687
687
|
|
688
688
|
* :attr:`~EnumSchema.registry` is added to subclasses as an *immutable*
|
689
689
|
proxy (similar to :class:`property`, but on class variables) to the
|
690
|
-
:attr
|
690
|
+
:attr:`__enum__` mapping.
|
691
691
|
|
692
692
|
Args:
|
693
693
|
name: Schema class name.
|
@@ -697,10 +697,14 @@ class EnumMeta(SchemaMeta):
|
|
697
697
|
|
698
698
|
"""
|
699
699
|
|
700
|
+
if TYPE_CHECKING:
|
701
|
+
#: Mapping of enumeration numbers to schemas (**internal use only**).
|
702
|
+
__enum__: 'DefaultDict[ET, Type[EnumSchema]]'
|
703
|
+
|
700
704
|
@property
|
701
705
|
def registry(cls) -> 'DefaultDict[ET, Type[EnumSchema]]':
|
702
706
|
"""Mapping of enumeration numbers to schemas."""
|
703
|
-
return cls.__enum__
|
707
|
+
return cls.__enum__
|
704
708
|
|
705
709
|
|
706
710
|
class EnumSchema(Schema, Generic[ET], metaclass=EnumMeta):
|
@@ -753,10 +757,9 @@ class EnumSchema(Schema, Generic[ET], metaclass=EnumMeta):
|
|
753
757
|
__default__: 'Callable[[], Type[Self]]' = lambda: None # type: ignore[assignment,return-value]
|
754
758
|
|
755
759
|
if TYPE_CHECKING:
|
756
|
-
#: Mapping of enumeration numbers to schemas (**internal use only**).
|
757
|
-
__enum__: 'DefaultDict[ET, Type[Self]]'
|
758
760
|
#: Mapping of enumeration numbers to schemas.
|
759
761
|
registry: 'DefaultDict[ET, Type[Self]]'
|
762
|
+
__enum__: 'DefaultDict[ET, Type[Self]]'
|
760
763
|
|
761
764
|
def __init_subclass__(cls, /, code: 'Optional[ET | Iterable[ET]]' = None, *args: 'Any', **kwargs: 'Any') -> 'None':
|
762
765
|
"""Register enumeration to :attr:`registry` mapping.
|
@@ -772,13 +775,13 @@ class EnumSchema(Schema, Generic[ET], metaclass=EnumMeta):
|
|
772
775
|
not given, the subclass will not be registered.
|
773
776
|
|
774
777
|
Notes:
|
775
|
-
If :attr
|
776
|
-
automatically be defined as a :class:`collections.defaultdict`
|
778
|
+
If :attr:`~EnumMeta.__enum__` is not yet defined at function call,
|
779
|
+
it will automatically be defined as a :class:`collections.defaultdict`
|
777
780
|
object, with the default value set to :attr:`__default__`.
|
778
781
|
|
779
|
-
If intended to customise the :attr
|
780
|
-
possible to override the :meth:`__init_subclass__` method and
|
781
|
-
define :attr
|
782
|
+
If intended to customise the :attr:`~EnumMeta.__enum__` mapping,
|
783
|
+
it is possible to override the :meth:`__init_subclass__` method and
|
784
|
+
define :attr:`~EnumMeta.__enum__` manually.
|
782
785
|
|
783
786
|
"""
|
784
787
|
if not hasattr(cls, '__enum__'):
|
@@ -787,9 +790,9 @@ class EnumSchema(Schema, Generic[ET], metaclass=EnumMeta):
|
|
787
790
|
if code is not None:
|
788
791
|
if isinstance(code, collections.abc.Iterable):
|
789
792
|
for _code in code:
|
790
|
-
cls.__enum__[_code] = cls
|
793
|
+
cls.__enum__[_code] = (cls) # type: ignore[index]
|
791
794
|
else:
|
792
|
-
cls.__enum__[code] = cls
|
795
|
+
cls.__enum__[code] = (cls) # type: ignore[index]
|
793
796
|
super().__init_subclass__()
|
794
797
|
|
795
798
|
@classmethod
|
@@ -801,4 +804,4 @@ class EnumSchema(Schema, Generic[ET], metaclass=EnumMeta):
|
|
801
804
|
schema: Enumetaion schema.
|
802
805
|
|
803
806
|
"""
|
804
|
-
cls.__enum__[code] = schema
|
807
|
+
cls.__enum__[code] = schema # type: ignore[index]
|
@@ -593,7 +593,11 @@ class _MPTCP(Schema):
|
|
593
593
|
|
594
594
|
"""
|
595
595
|
ret = self.data
|
596
|
+
|
597
|
+
ret.option = Enum_Option.Multipath_TCP
|
598
|
+
ret.length = self.test['length']
|
596
599
|
ret.subtype = Enum_MPTCPOption.get(packet['test']['subtype'])
|
600
|
+
|
597
601
|
return ret
|
598
602
|
|
599
603
|
|
@@ -607,6 +611,10 @@ class MPTCP(EnumSchema[Enum_MPTCPOption]):
|
|
607
611
|
__enum__: 'DefaultDict[Enum_MPTCPOption, Type[MPTCP]]' = collections.defaultdict(lambda: MPTCPUnknown)
|
608
612
|
|
609
613
|
if TYPE_CHECKING:
|
614
|
+
#: Option kind.
|
615
|
+
kind: 'Enum_Option'
|
616
|
+
#: MPTCP length.
|
617
|
+
length: 'int'
|
610
618
|
#: MPTCP subtype.
|
611
619
|
subtype: 'Enum_MPTCPOption'
|
612
620
|
|
pcapkit/toolkit/pcap.py
CHANGED
@@ -151,9 +151,9 @@ def tcp_reassembly(frame: 'Frame') -> 'TCP_Packet | None':
|
|
151
151
|
data = TCP_Packet(
|
152
152
|
bufid=(
|
153
153
|
ip_info.src, # source IP address
|
154
|
-
tcp_info.srcport,
|
154
|
+
tcp_info.srcport.port, # source port
|
155
155
|
ip_info.dst, # destination IP address
|
156
|
-
tcp_info.dstport,
|
156
|
+
tcp_info.dstport.port, # destination port
|
157
157
|
),
|
158
158
|
num=frame.info.number, # original packet range number
|
159
159
|
ack=tcp_info.ack, # acknowledgement
|
@@ -204,8 +204,8 @@ def tcp_traceflow(frame: 'Frame', *, data_link: 'LinkType') -> 'TF_TCP_Packet |
|
|
204
204
|
fin=tcp_info.flags.fin, # TCP finish (FIN) flag
|
205
205
|
src=ip_info.src, # source IP
|
206
206
|
dst=ip_info.dst, # destination IP
|
207
|
-
srcport=tcp_info.srcport,
|
208
|
-
dstport=tcp_info.dstport,
|
207
|
+
srcport=tcp_info.srcport.port, # TCP source port
|
208
|
+
dstport=tcp_info.dstport.port, # TCP destination port
|
209
209
|
timestamp=float(frame.info.time_epoch), # frame timestamp
|
210
210
|
)
|
211
211
|
return data
|
pcapkit/toolkit/pcapng.py
CHANGED
@@ -158,9 +158,9 @@ def tcp_reassembly(frame: 'PCAPNG') -> 'TCP_Packet | None':
|
|
158
158
|
data = TCP_Packet(
|
159
159
|
bufid=(
|
160
160
|
ip_info.src, # source IP address
|
161
|
-
tcp_info.srcport,
|
161
|
+
tcp_info.srcport.port, # source port
|
162
162
|
ip_info.dst, # destination IP address
|
163
|
-
tcp_info.dstport,
|
163
|
+
tcp_info.dstport.port, # destination port
|
164
164
|
),
|
165
165
|
num=frame_info.number, # original packet range number
|
166
166
|
ack=tcp_info.ack, # acknowledgement
|
@@ -213,8 +213,8 @@ def tcp_traceflow(frame: 'PCAPNG', *, nanosecond: 'bool' = False) -> 'TF_TCP_Pac
|
|
213
213
|
fin=tcp_info.flags.fin, # TCP finish (FIN) flag
|
214
214
|
src=ip_info.src, # source IP
|
215
215
|
dst=ip_info.dst, # destination IP
|
216
|
-
srcport=tcp_info.srcport,
|
217
|
-
dstport=tcp_info.dstport,
|
216
|
+
srcport=tcp_info.srcport.port, # TCP source port
|
217
|
+
dstport=tcp_info.dstport.port, # TCP destination port
|
218
218
|
timestamp=float(frame_info.timestamp_epoch), # frame timestamp
|
219
219
|
)
|
220
220
|
return data
|
pcapkit/utilities/compat.py
CHANGED
@@ -15,11 +15,13 @@ __all__ = [
|
|
15
15
|
|
16
16
|
# classes
|
17
17
|
'Collection', 'cached_property',
|
18
|
-
'Mapping', 'Tuple', 'List', 'Dict',
|
19
18
|
'StrEnum',
|
20
19
|
|
21
20
|
# modules
|
22
21
|
'pathlib',
|
22
|
+
|
23
|
+
# typing
|
24
|
+
'Mapping', 'Tuple', 'List', 'Dict', 'TypeAlias',
|
23
25
|
]
|
24
26
|
|
25
27
|
if sys.version_info < (3, 6):
|
@@ -125,9 +127,9 @@ if sys.version_info < (3, 9):
|
|
125
127
|
else:
|
126
128
|
from collections.abc import Mapping
|
127
129
|
|
128
|
-
Tuple = tuple
|
129
|
-
List = list
|
130
|
-
Dict = dict
|
130
|
+
Tuple: 'TypeAlias' = tuple
|
131
|
+
List: 'TypeAlias' = list
|
132
|
+
Dict: 'TypeAlias' = dict
|
131
133
|
|
132
134
|
if sys.version_info < (3, 11):
|
133
135
|
from aenum import StrEnum
|
@@ -187,3 +189,8 @@ if sys.version_info < (3, 11):
|
|
187
189
|
return list(_iter_bits_lsb(value))
|
188
190
|
else:
|
189
191
|
from enum import show_flag_values # type: ignore[attr-defined]
|
192
|
+
|
193
|
+
if sys.version_info < (3, 10):
|
194
|
+
from typing_extensions import TypeAlias
|
195
|
+
else:
|
196
|
+
from typing import TypeAlias
|
pcapkit/vendor/reg/apptype.py
CHANGED
@@ -120,28 +120,28 @@ class {NAME}(StrEnum):
|
|
120
120
|
return '%s [%d - %s]' % (self.svc, self.port, self.proto.name)
|
121
121
|
|
122
122
|
def __int__(self) -> 'int':
|
123
|
-
return self.
|
123
|
+
return self.port
|
124
124
|
|
125
125
|
def __lt__(self, other: '{NAME}') -> 'bool':
|
126
|
-
return self.
|
126
|
+
return self.port < other
|
127
127
|
|
128
128
|
def __gt__(self, other: '{NAME}') -> 'bool':
|
129
|
-
return self.
|
129
|
+
return self.port > other
|
130
130
|
|
131
131
|
def __le__(self, other: '{NAME}') -> 'bool':
|
132
|
-
return self.
|
132
|
+
return self.port <= other
|
133
133
|
|
134
134
|
def __ge__(self, other: '{NAME}') -> 'bool':
|
135
|
-
return self.
|
135
|
+
return self.port >= other
|
136
136
|
|
137
137
|
def __eq__(self, other: 'Any') -> 'bool':
|
138
|
-
return self.
|
138
|
+
return self.port == other
|
139
139
|
|
140
140
|
def __ne__(self, other: 'Any') -> 'bool':
|
141
|
-
return self.
|
141
|
+
return self.port != other
|
142
142
|
|
143
143
|
def __hash__(self) -> 'int':
|
144
|
-
return hash(self.
|
144
|
+
return hash(self.port)
|
145
145
|
|
146
146
|
{ENUM}
|
147
147
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pypcapkit
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.1
|
4
4
|
Summary: PyPCAPKit: comprehensive network packet analysis library
|
5
5
|
Author-email: Jarry Shaw <jarryshaw@icloud.com>
|
6
6
|
Maintainer: Jarry Shaw
|
@@ -39,15 +39,15 @@ Classifier: Typing :: Typed
|
|
39
39
|
Requires-Python: <4,>=3.6
|
40
40
|
Description-Content-Type: text/x-rst
|
41
41
|
License-File: LICENSE
|
42
|
-
Requires-Dist: dictdumper
|
42
|
+
Requires-Dist: dictdumper ~=0.8.0
|
43
43
|
Requires-Dist: chardet
|
44
44
|
Requires-Dist: aenum
|
45
|
-
Requires-Dist: tbtrim
|
45
|
+
Requires-Dist: tbtrim >=0.2.1
|
46
|
+
Requires-Dist: typing-extensions ; python_version < "3.11"
|
46
47
|
Requires-Dist: bpc-f2format ; python_version < "3.6"
|
47
48
|
Requires-Dist: bpc-poseur ; python_version < "3.8"
|
48
49
|
Requires-Dist: bpc-walrus ; python_version < "3.8"
|
49
|
-
Requires-Dist:
|
50
|
-
Requires-Dist: pathlib2 (>=2.3.2) ; python_version == "3.4"
|
50
|
+
Requires-Dist: pathlib2 >=2.3.2 ; python_version == "3.4"
|
51
51
|
Provides-Extra: dpkt
|
52
52
|
Requires-Dist: dpkt ; extra == 'dpkt'
|
53
53
|
Provides-Extra: pyshark
|
@@ -64,7 +64,7 @@ Requires-Dist: beautifulsoup4[html5lib] ; extra == 'all'
|
|
64
64
|
Provides-Extra: cli
|
65
65
|
Requires-Dist: emoji ; extra == 'cli'
|
66
66
|
Provides-Extra: docs
|
67
|
-
Requires-Dist: Sphinx
|
67
|
+
Requires-Dist: Sphinx >=6.1.3 ; extra == 'docs'
|
68
68
|
Requires-Dist: furo ; extra == 'docs'
|
69
69
|
Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
|
70
70
|
Requires-Dist: sphinx-opengraph ; extra == 'docs'
|
@@ -163,7 +163,7 @@ Test Environment
|
|
163
163
|
.. list-table::
|
164
164
|
|
165
165
|
* - Operating System
|
166
|
-
- macOS Ventura 13.4
|
166
|
+
- macOS Ventura 13.4.1
|
167
167
|
* - Chip
|
168
168
|
- Apple M2 Pro
|
169
169
|
* - Memory
|
@@ -175,10 +175,10 @@ Test Results
|
|
175
175
|
============= ===========================
|
176
176
|
Engine Performance (ms per packet)
|
177
177
|
============= ===========================
|
178
|
-
``dpkt`` 0.
|
179
|
-
``scapy`` 0.
|
180
|
-
``pcapkit`` 0.
|
181
|
-
``pyshark``
|
178
|
+
``dpkt`` 0.010390_056723
|
179
|
+
``scapy`` 0.091690_233567
|
180
|
+
``pcapkit`` 0.200390_390390
|
181
|
+
``pyshark`` 24.682185_018351
|
182
182
|
============= ===========================
|
183
183
|
|
184
184
|
------------
|
@@ -1,4 +1,4 @@
|
|
1
|
-
pcapkit/__init__.py,sha256=
|
1
|
+
pcapkit/__init__.py,sha256=4aoXOHBzsFC4QoQU4O78nX8QNLqFpwioKigK4mRsG7g,4091
|
2
2
|
pcapkit/__main__.py,sha256=K_XEsZHJqDUdRfext2dN7jlnno5ub3bqjklwmWrZ8KQ,5581
|
3
3
|
pcapkit/all.py,sha256=vQvbo8IeDW9nzW7dkCnakhgljO8t1lH5OgW0F-iTDwI,6598
|
4
4
|
pcapkit/const/__init__.py,sha256=XpEr66hXmBpBofS5aHiTZXTG8VZlxU7xy0BNXBKCi1Q,3266
|
@@ -116,7 +116,7 @@ pcapkit/const/pcapng/record_type.py,sha256=4rZytbhhF6u5SPvQ8ew3jx4OhN_rwDQG3I4Jl
|
|
116
116
|
pcapkit/const/pcapng/secrets_type.py,sha256=n_662aowLtqA25ilbdG6BWb2rYmrdBJt79_SISzfJkw,1578
|
117
117
|
pcapkit/const/pcapng/verdict_type.py,sha256=_jEkN0g6CX-DGshAj-lUiZjiwdK7Fqou2pnzgZ-WyIk,1476
|
118
118
|
pcapkit/const/reg/__init__.py,sha256=xKABPHwDQ0diN2sFA7hkw42FNsb6tx294XemEjTs2g8,1469
|
119
|
-
pcapkit/const/reg/apptype.py,sha256=
|
119
|
+
pcapkit/const/reg/apptype.py,sha256=9e9DIaRsHrY6h4b-DQkhrxW_Dqs2SSR6nQpGxyBDnv4,1426845
|
120
120
|
pcapkit/const/reg/ethertype.py,sha256=MlESESKA5yOSppkNXLkiqTEXUEJI7uTq_8_RSduDK5Q,25954
|
121
121
|
pcapkit/const/reg/linktype.py,sha256=gYGIKpI21d4dpfO5ZAU8efqz1eBLVUiQnSLA1anKits,37247
|
122
122
|
pcapkit/const/reg/transtype.py,sha256=7ZQOWFNGP8toBNRko0NuNih-sh3oo5RgIWBIKFb9bRQ,12872
|
@@ -128,23 +128,23 @@ pcapkit/const/tcp/option.py,sha256=wbKmXwUTan7ICLkIqVBiM6esQNsuRY5keTE9_e2_7HQ,5
|
|
128
128
|
pcapkit/const/vlan/__init__.py,sha256=e58kBqVyx-aNe10uWkfI1grb1gI5t-VxyYnmP4qT2bM,690
|
129
129
|
pcapkit/const/vlan/priority_level.py,sha256=lditGE8zcRNmCnPW7lTM45R5Q9RQ-CqBRkqGGDSByJw,1936
|
130
130
|
pcapkit/corekit/__init__.py,sha256=9dBR8nKuymYe14vO9Gtt45AOznrAK9strSmO9CK6QoI,1508
|
131
|
-
pcapkit/corekit/infoclass.py,sha256=
|
131
|
+
pcapkit/corekit/infoclass.py,sha256=5PCrqBYfDy8y1pilHl7aCkPdiLQlQhIW9e5dgQKRE9E,14423
|
132
132
|
pcapkit/corekit/multidict.py,sha256=VuB9-DFZYpl_Z0z07YAhykoj9_ccHCp1RDG3uCceC1s,22015
|
133
133
|
pcapkit/corekit/protochain.py,sha256=bTEK327E_iQp8e7s5en7zbVDCGIKFHxoTmA6V-3-j9g,7687
|
134
134
|
pcapkit/corekit/version.py,sha256=jI8VDmBTmwdj8tx-JJ4YB7p1xL62-mQ8W-C0NzvsF-Y,470
|
135
135
|
pcapkit/corekit/fields/__init__.py,sha256=MVsU-XQbmB3Ut0xrs17lsyVHMyzwyWO0g2sNCrkeaE4,1552
|
136
|
-
pcapkit/corekit/fields/collections.py,sha256=
|
136
|
+
pcapkit/corekit/fields/collections.py,sha256=utcPi6mUisRpUHa1VAyO-GiwL1KadsBHoXnvkpfINUU,9378
|
137
137
|
pcapkit/corekit/fields/field.py,sha256=lMqwE8MAs-BXins1T_-XM_HOpdoHy7I3h91TpoaR71Y,7431
|
138
138
|
pcapkit/corekit/fields/ipaddress.py,sha256=MZlV_B3QGt0w_q3NTIYF8GZjEtEnNuVYenkzB428vyg,8370
|
139
139
|
pcapkit/corekit/fields/misc.py,sha256=kyn2Wk3YxV1csC_16pMEd-WY6aTF5NvNdyJEomJw1a8,20756
|
140
140
|
pcapkit/corekit/fields/numbers.py,sha256=3kgnePxwPNgL38ujcd2SkTMkke4wfk4rPbt_GCHSF50,11775
|
141
141
|
pcapkit/corekit/fields/strings.py,sha256=MunIs1K9wlBxzYSDvowwTHX2AadZqYsYTqGN5xrfVdc,8814
|
142
142
|
pcapkit/dumpkit/__init__.py,sha256=Q8eZXOAxPqMojnGfE3ypqxRQOv8wuQfinAabe2W3P6E,370
|
143
|
-
pcapkit/dumpkit/common.py,sha256=
|
143
|
+
pcapkit/dumpkit/common.py,sha256=CPq775MrotgmaTjGQ4_9v9vsAbySOeNvF6LsUlZFpR0,4523
|
144
144
|
pcapkit/dumpkit/null.py,sha256=wL94KoKWtozmXPHbH63K9aH71XOKgFLLf5WechyEBCc,2243
|
145
145
|
pcapkit/dumpkit/pcap.py,sha256=hPNvwFBumhQI0sq2CyxXQj20Lg-cI8re-CdTYL6NK4g,4165
|
146
146
|
pcapkit/foundation/__init__.py,sha256=wwTcVaNs1CPsZiYXucOl4TDw8VJ_OKdgxfQ22dSfG44,1488
|
147
|
-
pcapkit/foundation/extraction.py,sha256=
|
147
|
+
pcapkit/foundation/extraction.py,sha256=Lbc8ReQDt-wkIFZO2YBF9P40JDe8lz2GHv7cJGPZc-s,28861
|
148
148
|
pcapkit/foundation/engines/__init__.py,sha256=7Qskb6OE8xzGO50Yrk2BrcU5ZAnP5TX8n5tee_FVnaQ,858
|
149
149
|
pcapkit/foundation/engines/dpkt.py,sha256=GgG72MkDjs5NPQf61KbHIvOiliFrxFtyGFVuRUBNz5o,7575
|
150
150
|
pcapkit/foundation/engines/engine.py,sha256=pQEZtIDSFwE5RexkgkEtCs9AOGyh8Tdw3W8RhBF2H4Y,2496
|
@@ -159,26 +159,26 @@ pcapkit/foundation/reassembly/ipv6.py,sha256=MkJbR8x9yCQA6Wsh8E3oCD6p-jFqsco7lqC
|
|
159
159
|
pcapkit/foundation/reassembly/reassembly.py,sha256=hjwyXC4C7iIIts_GlxGLyG03jeptvLs3OC1iIgYC6I8,6448
|
160
160
|
pcapkit/foundation/reassembly/tcp.py,sha256=ld-lpYG3yepAyZSJy41uxUTLQ1uuL3U_w1JHyztoVBs,9922
|
161
161
|
pcapkit/foundation/reassembly/data/__init__.py,sha256=A3epDzztgAZDjxqt_ss9K1c9SPDSn3-2u8qWPAjqhiQ,1924
|
162
|
-
pcapkit/foundation/reassembly/data/ip.py,sha256=
|
163
|
-
pcapkit/foundation/reassembly/data/tcp.py,sha256=
|
162
|
+
pcapkit/foundation/reassembly/data/ip.py,sha256=JfZFNuWQpYWJaavVNEPu-MVa2_j7C03J3dRUrmtWgMU,4196
|
163
|
+
pcapkit/foundation/reassembly/data/tcp.py,sha256=MHPOJGYLSY7K6bl5i2hbfF4ah3ya2gFxawGRY-BYIEk,5169
|
164
164
|
pcapkit/foundation/registry/__init__.py,sha256=VLAzpJ4dEYGEcxFXdPnrsLtW8l-eeoCsxIv-XGpYV3c,1089
|
165
165
|
pcapkit/foundation/registry/foundation.py,sha256=Rgowvnz_qqpiRKPuEyW6A12wbTeIxwPkjOir_NVv5Jo,4822
|
166
166
|
pcapkit/foundation/registry/protocols.py,sha256=InVwwTE5xHH5j4sU4P9o1XF72Ion5d38mdc9RWlyu4Y,35228
|
167
167
|
pcapkit/foundation/traceflow/__init__.py,sha256=Sk6mrQ51EGTcfV5s6FdIoRVM002t1LlN2rLIe-kfLy4,999
|
168
|
-
pcapkit/foundation/traceflow/tcp.py,sha256=
|
168
|
+
pcapkit/foundation/traceflow/tcp.py,sha256=v7mHp5HJNzaLmOT5mm09ierPzJ9qHJdsmsxQFWNbXGI,5706
|
169
169
|
pcapkit/foundation/traceflow/traceflow.py,sha256=ZfHkfMdhvTFsHvxWzcUJD-fTX-hO-HA2PJLrmIn6Mgs,8280
|
170
170
|
pcapkit/foundation/traceflow/data/__init__.py,sha256=1qHFuYkGvimhmNuLFHI-FXa2gsSKguzWPqCOxeN_UUw,919
|
171
|
-
pcapkit/foundation/traceflow/data/tcp.py,sha256=
|
171
|
+
pcapkit/foundation/traceflow/data/tcp.py,sha256=3pWg03OmMJzWjovH48F49LcAcWbCt2cjo7N4B47XncY,3059
|
172
172
|
pcapkit/interface/__init__.py,sha256=UnQ1wjAWjP4iTA8HGRNonYDegDzCps4f7oWt7GK4kUE,809
|
173
|
-
pcapkit/interface/core.py,sha256=
|
173
|
+
pcapkit/interface/core.py,sha256=qI8zz5TNgpz-7qs7qPvNyezS9Tuq9YG-T8lsYJFNqHM,7203
|
174
174
|
pcapkit/interface/misc.py,sha256=CRirlQQe4XQJzwakJv8c2xZeOJlqlfsMFlrvyQxsio8,4802
|
175
175
|
pcapkit/protocols/__init__.py,sha256=MzPJGg_hkGmPMxe8B2AznOU6p2HHRV4GrS6Odb9u7uQ,1745
|
176
|
-
pcapkit/protocols/protocol.py,sha256=
|
176
|
+
pcapkit/protocols/protocol.py,sha256=lXQCkPDOKDtbqKlq-iAZHoWIjH5ppuyz-wZB0FRKNtE,43579
|
177
177
|
pcapkit/protocols/application/__init__.py,sha256=nInVbuUoyQiLGATLiCyxkyEfWyXVJMYVOr7ddrh7LDg,1044
|
178
178
|
pcapkit/protocols/application/application.py,sha256=TDyWuSLhRL8-MuUXcwn5dM55Tm7CjspApfHYOmnZZew,4302
|
179
179
|
pcapkit/protocols/application/ftp.py,sha256=FdNVpBKKYzNV5Cj8Gqm5VqK2O0x9S7SupsL-JgGmdpw,6532
|
180
|
-
pcapkit/protocols/application/http.py,sha256=
|
181
|
-
pcapkit/protocols/application/httpv1.py,sha256=
|
180
|
+
pcapkit/protocols/application/http.py,sha256=dfXkb38E_ZAyFDWay_Pm3WCJS_lZeQHheXAVsh68uqU,6274
|
181
|
+
pcapkit/protocols/application/httpv1.py,sha256=xZyUWouMM9BhvqQtnvezDrMq_QGWnyPuijWn5SAjd5k,11586
|
182
182
|
pcapkit/protocols/application/httpv2.py,sha256=1Nz4gQdLx15BFmdJqFV4I37WpomYHHMMLlZI8HV2yIs,49569
|
183
183
|
pcapkit/protocols/application/NotImplemented/bgp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
184
184
|
pcapkit/protocols/application/NotImplemented/dhcp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -276,7 +276,7 @@ pcapkit/protocols/misc/pcap/__init__.py,sha256=-uxoPg3k-8NteBUUxLdgysbpwHbV_uyHy
|
|
276
276
|
pcapkit/protocols/misc/pcap/frame.py,sha256=pUScBj8DRQq0AIKR6Eq5i7qUTgnpsmFmuKO9VF59f3I,17448
|
277
277
|
pcapkit/protocols/misc/pcap/header.py,sha256=4gDu-24VcPNG_16tYeKb0T0myERbWwlh4AJST2wEiBo,12665
|
278
278
|
pcapkit/protocols/schema/__init__.py,sha256=h5GqPMdMYNM7089UA8wLP8E17wEAIZCGoSoySFss6Dg,7306
|
279
|
-
pcapkit/protocols/schema/schema.py,sha256=
|
279
|
+
pcapkit/protocols/schema/schema.py,sha256=FnBT7sJHNMXZcw6tdy47xnCQedP92O99EBv_4JbEeSI,29320
|
280
280
|
pcapkit/protocols/schema/application/__init__.py,sha256=5Cug38rdq8thUWMol0ICGIPP7FW3nBeBnFWPbnU0sbA,1997
|
281
281
|
pcapkit/protocols/schema/application/ftp.py,sha256=uZm2D5Za3GJCjATk76dJOwNsO8GuFDMNVtqy2qzSmiI,520
|
282
282
|
pcapkit/protocols/schema/application/httpv1.py,sha256=hJ9mvWfhbXUSpWvgLGAfSu0_MhXqxkJnxuv3PbUYDaE,523
|
@@ -306,7 +306,7 @@ pcapkit/protocols/schema/misc/pcap/__init__.py,sha256=hM9-xbwwO2ZQsX4k2FsAHGEbxS
|
|
306
306
|
pcapkit/protocols/schema/misc/pcap/frame.py,sha256=H1WxunVvypLHYVp8RT7B4r8eI_sICXfMgHaBP2f386w,1557
|
307
307
|
pcapkit/protocols/schema/misc/pcap/header.py,sha256=bxi1MDnc6wvIQcE-uxrqi8t3_YnZDl94j36oJ6BYoGo,2327
|
308
308
|
pcapkit/protocols/schema/transport/__init__.py,sha256=e2Z308ZrFrCVUiABvQyb_9N_jGeMlxIwF2vDHLjB7Vc,4371
|
309
|
-
pcapkit/protocols/schema/transport/tcp.py,sha256=
|
309
|
+
pcapkit/protocols/schema/transport/tcp.py,sha256=oGcodchFgjwfcEvoFowSXjwERaD70vk7gxOTI4Xn_cA,27948
|
310
310
|
pcapkit/protocols/schema/transport/udp.py,sha256=DQXks3Jo5Pp3jzdGR6xngZPpCMujRCT4WAtRgLl1KH0,2992
|
311
311
|
pcapkit/protocols/transport/__init__.py,sha256=15zwQlVMcPJeG-s1DZCOU4bA_fPfY52-VRQEO7-TWqw,780
|
312
312
|
pcapkit/protocols/transport/tcp.py,sha256=8ZgUhvY4HDMIhsowdVlqijswIq2pCRURz_tcGx_yy5c,113643
|
@@ -317,12 +317,12 @@ pcapkit/protocols/transport/NotImplemented/rsvp.py,sha256=47DEQpj8HBSa-_TImW-5JC
|
|
317
317
|
pcapkit/protocols/transport/NotImplemented/sctp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
318
318
|
pcapkit/toolkit/__init__.py,sha256=pidjgoJjQxW8z--lY9eR6k_ANc2kF6U0Rgv99S3QeEs,2623
|
319
319
|
pcapkit/toolkit/dpkt.py,sha256=c4B8NT60_jQMk9Fh-VdJG_4NzxE-RofiNna2a6vXDts,12433
|
320
|
-
pcapkit/toolkit/pcap.py,sha256=
|
321
|
-
pcapkit/toolkit/pcapng.py,sha256=
|
320
|
+
pcapkit/toolkit/pcap.py,sha256=GVWg_LX4Pu_qldLmBGUIwl4C_1tKCpNr0mkSfI98qdg,9132
|
321
|
+
pcapkit/toolkit/pcapng.py,sha256=16ibqo6lsN3QAwTWsFf76P8mE-FlkqJhTgTzjzltrQ8,10420
|
322
322
|
pcapkit/toolkit/pyshark.py,sha256=UwvzNkwplVBQZFggXvOsOTkJeUdZsE5tIe6DTMp7irA,3388
|
323
323
|
pcapkit/toolkit/scapy.py,sha256=8zEyWbbXHWyIcJ5qWKIzED6CUgBbDZrYMzTJJr8gqgI,11435
|
324
324
|
pcapkit/utilities/__init__.py,sha256=nd_SO3k9zXgi-Vesa1bhBiAgu55x2BeRMclLsdz9RWg,692
|
325
|
-
pcapkit/utilities/compat.py,sha256=
|
325
|
+
pcapkit/utilities/compat.py,sha256=fq16iG0leV4cyglNn2GeXdIIwUVzwMXGtdPigrejrgo,6533
|
326
326
|
pcapkit/utilities/decorators.py,sha256=7UTb4DjXWjMeEfxX2z7jvkbkBUhZngDraFp1LSVn1As,6506
|
327
327
|
pcapkit/utilities/exceptions.py,sha256=Ht2eX8IWMizp04OQaOwkg85vE7ZxybVt3u2CPb2qsnQ,10541
|
328
328
|
pcapkit/utilities/logging.py,sha256=W0QbD16F_lLbvKzruZ9g7kho-gFRFCUIhdE_ub4xzh4,1918
|
@@ -444,7 +444,7 @@ pcapkit/vendor/pcapng/record_type.py,sha256=cqiRPWETwl-MItPhGqJrLd9dDh3ivM3Ed3I6
|
|
444
444
|
pcapkit/vendor/pcapng/secrets_type.py,sha256=hTEstMPuri04ac_q26Nt9bM1VRSyvdbanPYJrU5H3DQ,2165
|
445
445
|
pcapkit/vendor/pcapng/verdict_type.py,sha256=rVGrJOIS0ikiSu0X23lfjANTiy2IeII31GCXkGtSPRg,1977
|
446
446
|
pcapkit/vendor/reg/__init__.py,sha256=OryPFPYmNYAIkm_rvUAIcNn69ymfDJiFNL2DFbZXkto,1411
|
447
|
-
pcapkit/vendor/reg/apptype.py,sha256=
|
447
|
+
pcapkit/vendor/reg/apptype.py,sha256=z-OQJcGKq4gnfigpEe4V_9bPWQtJLpSmgA3yaPtVoKU,10310
|
448
448
|
pcapkit/vendor/reg/ethertype.py,sha256=FI64Kk3_048CporpQOAwGi-Po9net5HwZnO0mJBSQTo,3752
|
449
449
|
pcapkit/vendor/reg/linktype.py,sha256=i4A7Zmk9So2AaBP1KlsE_7rv5g8QWDaWJ4giRyXtT6E,3284
|
450
450
|
pcapkit/vendor/reg/transtype.py,sha256=7UqVA4evH6luliMpDRhzKcYoIKm8FiogqzI8ovoQyqc,3365
|
@@ -455,9 +455,9 @@ pcapkit/vendor/tcp/mp_tcp_option.py,sha256=fLtttA2-p3qXRcP-1kI3gA-08F0bhCCgVQTLi
|
|
455
455
|
pcapkit/vendor/tcp/option.py,sha256=8-0kq6GTKFCjHjxnDU3T-IUvjp5XA7MiCr2BN_aDonI,2958
|
456
456
|
pcapkit/vendor/vlan/__init__.py,sha256=qvLktJ0yuoZokas6-_ZGwMJOzbujSCM8pZHQ9jjTegU,674
|
457
457
|
pcapkit/vendor/vlan/priority_level.py,sha256=xVu6M-Ys4pft5I-qPCCxM-KfnMAUnZppD2qPO9gPkVE,2961
|
458
|
-
pypcapkit-1.1.
|
459
|
-
pypcapkit-1.1.
|
460
|
-
pypcapkit-1.1.
|
461
|
-
pypcapkit-1.1.
|
462
|
-
pypcapkit-1.1.
|
463
|
-
pypcapkit-1.1.
|
458
|
+
pypcapkit-1.1.1.dist-info/LICENSE,sha256=KkKND5E2e1Z6CQvSLPc1lRBy4xPRed41AG6q1txotWk,1516
|
459
|
+
pypcapkit-1.1.1.dist-info/METADATA,sha256=Np_WIVd0XLdvTn06u3lUepTVp1fwK511g8DixPrbL2c,7665
|
460
|
+
pypcapkit-1.1.1.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
|
461
|
+
pypcapkit-1.1.1.dist-info/entry_points.txt,sha256=8tVaZ-N0S2t19ELoTEGq_OlC8-dSmd7dvNn-kMV3afY,100
|
462
|
+
pypcapkit-1.1.1.dist-info/top_level.txt,sha256=KEssKRhG9ln3EOfGH-yi98HgI-MM9hOHy09QQP-fvk8,8
|
463
|
+
pypcapkit-1.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|