Flow Tracing¶
Note
This approximates the Follow TCP Stream feature of Wireshark.
pcapkit.foundation.traceflow implements flow tracing.
See also
Customisation & Extensions, on customisation and extension.
Every flow tracing class subclasses
TraceFlowBase, following the
flows of extracted packets:
flowchart TD
A{{TraceFlowMeta}} -.->|metaclass| B(TraceFlowBase)
B --> TCP
B --> C(TraceFlow)
C --> D([user customisation ...])
click A "traceflow.html#pcapkit.foundation.traceflow.traceflow.TraceFlowMeta"
click B "traceflow.html#pcapkit.foundation.traceflow.traceflow.TraceFlowBase"
click C "traceflow.html#pcapkit.foundation.traceflow.traceflow.TraceFlow"
click D "../../../ext.html#reassembly-and-flow-tracing"
click TCP "tcp.html#pcapkit.foundation.traceflow.tcp.TCP"
Auxiliary Data¶
- class pcapkit.foundation.traceflow.data.data.TraceFlowData(tcp)[source]¶
Bases:
InfoData storage for flow tracing.
- class pcapkit.foundation.traceflow.data.data.Deferred(reassembly)[source]¶
Bases:
objectA postponed reassembly of a traced flow’s application layer.
A traced flow’s
packetis the application-layer payload of the conversation, as reassembled datagrams – one per direction and acknowledgement number, seeTCP. Producing it means reassembling the stream, which is neither free nor wanted by most callers of a tracer – so the flow keeps the reassembler it was fed and this holds it until somebody readsIndex.packet.Note
Deliberately not
pcapkit.foundation.reassembly.data.data.Deferred, and not shared with it. That one postpones a singleanalyze()call over bytes already in hand; this postpones a submit over a reassembler’s buffers. The reassembly and flow tracing subpackages are siblings, and the flow tracer reaches the reassembler only lazily, whenanalyseasks for one, so the few lines are written in each rather than one importing the other – the same reason theirdata.pymodules mirror each other instead of merging.- Parameters:
reassembly (
TCP) – The flow’s ownTCPreassembler, fed the segments of this conversation as they were traced.
- __call__()[source]¶
Run the postponed reassembly.
- Return type:
- Returns:
The conversation’s reassembled datagrams, one per direction and acknowledgement number. Each carries its own postponed analysis in
Datagram.packet, so parsing the payload as an application-layer protocol is still not paid for until that is read in turn.
- class pcapkit.foundation.traceflow.data.data.FrameRecord(mapping, *, packet, frame_info, time_epoch)[source]¶
Bases:
InfoA frame as a third-party engine’s flow tracing adapter reports it.
The mapping is the engine’s own dissection of the frame, which every trace format that takes a mapping writes unchanged. Beside it, as attributes the mapping does not show, it carries what the PCAP trace dumper reads of a frame –
PCAPIO._append_valuetakespacket,frame_infoandtime_epoch– sotrace_format='pcap'writes the frame’s record too (#1507). A key of the mapping and an attribute of the same name stay apart:record['packet']is the engine’s, andrecord.packetthe frame’s captured octets.- Parameters:
Changed in version 1.6.0: An
Inforather than adictsubclass, so it is immutable and nodict.to_dict()exports the mapping alone, as anyInfoexports its keys, and drops thepacket,frame_infoandtime_epochattributes (#2726).- frame_info: FrameInfo¶
The frame’s PCAP record header, with the fraction in the capture’s own resolution.
- time_epoch: Decimal¶
The frame’s exact UNIX timestamp, from which
PCAPIO._make_timestamptells which resolutionframe_info.ts_usecis in. ADecimal, since only that settles it exactly.
- __getattribute__(name)[source]¶
Read an attribute, taking
packet,frame_infoandtime_epochfrom the keys holding them.So a mapping key of the same name never stands in for one of them.
- Parameters:
name (
str) – Attribute name.- Raises:
AttributeError – If
nameis one of them and the record carries none, as onefrom_dict()builds from a mapping.- Return type:
- __reduce_ex__(protocol)[source]¶
Reduce to a call of
_frame_record(), under every protocol.A release before 1.6.0 reduces a record to it as well, so a pickle loads on either side of 1.6.0.
- Parameters:
protocol (
SupportsIndex) – Pickle protocol in use, which does not change the reduction.- Return type:
- Returns:
(_frame_record, (mapping, packet, frame_info, time_epoch)).