TCP - Transmission Control Protocol¶
pcapkit.protocols.transport.tcp.protocol contains
TCP only,
which implements the extractor for Transmission Control
Protocol (TCP) [*], whose structure is:
Octets |
Bits |
Name |
Description |
|---|---|---|---|
0 |
0 |
|
Source Port |
2 |
16 |
|
Destination Port |
4 |
32 |
|
Sequence Number |
8 |
64 |
|
Acknowledgement Number (if ACK set) |
12 |
96 |
|
Data Offset |
12 |
100 |
|
Reserved (must be |
12 |
103 |
|
ECN Concealment Protection (NS) |
13 |
104 |
|
Congestion Window Reduced (CWR) |
13 |
105 |
|
ECN-Echo (ECE) |
13 |
106 |
|
Urgent (URG) |
13 |
107 |
|
Acknowledgement (ACK) |
13 |
108 |
|
Push Function (PSH) |
13 |
109 |
|
Reset Connection (RST) |
13 |
110 |
|
Synchronize Sequence Numbers (SYN) |
13 |
111 |
|
Last Packet from Sender (FIN) |
14 |
112 |
|
Size of Receive Window |
16 |
128 |
|
Checksum |
18 |
144 |
|
Urgent Pointer (if URG set) |
20 |
160 |
|
TCP Options (if data offset > 5) |
- class pcapkit.protocols.transport.tcp.protocol.TCP(file=None, length=None, **kwargs)[source]¶
-
This class implements Transmission Control Protocol.
The
self.__proto__registry binds these ports:Port Number
Protocol
20
21
80
443
8080
The TCP options it parses, by
pcapkit.const.tcp.option.Optioncode:Option Code
Option Parser
Option Constructor
The Multipath TCP options it parses, by
pcapkit.const.tcp.mp_tcp_option.MPTCPOptionsubtype:Option Code
Option Parser
Option Constructor
Changed in version 1.5.0:
read()reports theconnectionflags of a flagless segment, andinfo.connection, as an emptyFlagsrather than a plainint(#616).A constructed MPTCP option sets its
subtype(#566), and MP_CAPABLE is written at the RFC 8684 lengths (#567) and read at each of them (#1042).A rebuild keeps what was parsed: the option order and padding (#1151), the reserved bits of the header and of the POCSP, Quick-Start and MPTCP options (#1211, #1212), the octets after EOOL (#1218), the User Timeout granularity (#1219), and the MP_CAPABLE
Cflag andD-Gbits (#1220).read()refuses a Data Offset that declares more header than the data holds, rather than reading the missing octets as zeros (#1404).MPTCP parsing follows the flags and the option length: MP_FAIL reads its DSN at the right offset (#1213), an unknown subtype stays within its option (#1214), DSS sizes its Data ACK and DSN from the
aandmflags and reads a checksum only when one is present (#1215, #1216), and ADD_ADDR parses the RFC 8684 layout (#1217).
Changed in version 1.6.0:
The checksum is computed when
make()is given none, over thepseudoit is given or by the enclosing IP layer, and verified by that layer underCHECKSUM_VERIFY(#2473).A Quick-Start rate the four-bit rate code cannot carry, or a nonce or reserved value outside its field, raises
ProtocolError, rather than a bareValueError, anOverflowErroror aFieldValueError, or a rate of zero written in its place (#2617).make()and the option makers raiseProtocolErrorfor an integer field given a value its width cannot hold, rather than writing its low bits or raising aFieldValueErroror a bareValueError, and for a fixed-size octet field given the wrong number of octets, rather than padding or cutting them. A User Timeout that is neither anintnor atimedeltaraises the same, rather than anAttributeError. The Quick-Start TTL Diff wraps, as RFC 4782 defines it modulo 256 (#2614).Each enumeration field of the option makers, the alternate checksum
algorithmand the Multipath TCPsubtype, and the kind of each option given tomake(), takes a member or anintcode, resolved with the enumeration’sget; a name, abool, or a code the field cannot carry raisesProtocolError, rather than resolving against an enumeration inferred from the caller’s frame, writing a different value or raising another exception (#2594).An option given to
make()as raw octets, of a kind no member ofOptionholds, such as 255, which parses as an unassigned option, builds as its(code, arguments)pair does, rather than raisingEnumValueError; and empty raw octets, which hold no kind, raiseProtocolErrorrather than anIndexError(#2708).A header
make()builds, such as the onefrom_data()rebuilds, reads the octets after its End of Option List aspadding, as a parse of its octets does, rather than as empty (#2769).
Removed in version 1.6.0: The
algorithm_default,algorithm_namespaceandalgorithm_reversedarguments of the alternate checksum request option maker, and thesubtype_default,subtype_namespaceandsubtype_reversedarguments of the Multipath TCP option maker; resolve a name withresolve_index()first (#2594).- __proto__: DefaultDict[int, ModuleDescriptor[ProtocolBase] | Type[ProtocolBase]]¶
Protocol index mapping for decoding next layer, see
self._decode_next_layer&self._import_next_layer.
- __proto_key__: ClassVar[tuple[Type[EnumRegistry], bool]]¶
What
__proto__is keyed by – the enum a key must be a member of, and whether a bareintis valid too. Read byregister_protocol_code()to check acode=key asregister_tcp()checks its own; a bareintis a port number, which anAppTypemember carries (#2268).
- __option__: DefaultDict[int, str | tuple[Callable[[Option, OrderedMultiDict[Option, Option]], Option], Callable[[Option, Option | None, Any], Option]]]¶
Option code to method mapping, see
_read_tcp_options()and_make_tcp_options(). Astrvalue names the methods_read_mode_${name}and_make_mode_${name}, falling back to_read_mode_donone()and_make_mode_donone()when the class has no such method; any other value is a(parser, constructor)pair of callables.
- __mp_option__: DefaultDict[int, str | tuple[Callable[[MPTCP, OrderedMultiDict[Option, Option]], MPTCP], Callable[[MPTCPOption, MPTCP | None, Any], MPTCP]]]¶
Option code to method mapping, see
_read_mode_mp()and_make_mode_mp(). Astrvalue names the methods_read_mptcp_${name}and_make_mptcp_${name}, falling back to_read_mptcp_unknown()and_make_mptcp_unknown()when the class has no such method; any other value is a(parser, constructor)pair of callables.
- read(length=None, **kwargs)[source]¶
Read Transmission Control Protocol (TCP).
Structure of TCP header [RFC 793]:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgement Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Parameters:
- Return type:
- Returns:
Parsed packet data.
- Raises:
ProtocolError – If the Data Offset declares more header than the data holds.
- make(srcport=0, dstport=0, seq_no=0, ack_no=0, ns=False, cwr=False, ece=False, urg=False, ack=False, psh=False, rst=False, syn=False, fin=False, window=65535, checksum=None, urgent=0, options=None, payload=b'', padding=b'', reserved=0, pseudo=None, **kwargs)[source]¶
Make (construct) packet data.
- Parameters:
seq_no (
int) – Sequence number.ack_no (
int) – Acknowledgement number.ns (
bool) – ECN-nonce concealment protection.cwr (
bool) – Congestion window reduced.ece (
bool) – ECN-Echo.urg (
bool) – Urgent.ack (
bool) – Acknowledgement.psh (
bool) – Push function.rst (
bool) – Reset connection.syn (
bool) – Synchronize sequence numbers.fin (
bool) – Last packet from sender.window (
int) – Window size.checksum (
bytes|None) – Checksum; ifNoneandCHECKSUM_COMPUTEis on, computed overpseudo(RFC 793 Section 3.1), or left to an IP layer this segment is the payload of; zero otherwise.urgent (
int) – Urgent pointer.options (
list[Option|tuple[Option|int,dict[str,Any]] |bytes] |OrderedMultiDict[Option,Option] |None) – TCP options.payload (
bytes|ProtocolBase|Schema) – Payload of the packet.padding (
bytes) – Octets after the End of Option List option; dropped unlessoptionsend with one.reserved (
int) – Reserved bits 4-6 of octet 12.pseudo (
IP_Pseudo|None) – Pseudo-header of the enclosing IP layer; its length is replaced by this segment’s own.**kwargs (
Any) – Arbitrary keyword arguments.
- Return type:
- Returns:
Constructed packet data.
- Raises:
ProtocolError – If
srcportordstportis abool(#2287), a numeric field does not fit its width, orchecksumis not two octets.
Changed in version 1.5.0: An out-of-range
srcportordstportraisesValueErrorrather than being accepted (#758).
- classmethod register_option(code, meth)[source]¶
Register an option parser.
- Parameters:
- Warns:
RegistryWarning– If a different entry is already registered forcode; it is overwritten. Handing back the entry already stored, or one equal to it, is a silent no-op. Re-registering the entrycodeshipped with is accepted like any other, so an override can be undone (#1362, #1363).
- classmethod register_mp_option(code, meth)[source]¶
Register an MPTCP option parser.
- Parameters:
code (
MPTCPOption) – MPTCP option code.meth (
str|tuple[Callable[[MPTCP,OrderedMultiDict[Option,Option]],MPTCP],Callable[[MPTCPOption,MPTCP|None,Any],MPTCP]]) – Method name, or a(parser, constructor)pair of callables, to parse and construct the option; see__mp_option__.
- Warns:
RegistryWarning– If a different entry is already registered forcode; it is overwritten. Handing back the entry already stored, or one equal to it, is a silent no-op. Re-registering the entrycodeshipped with is accepted like any other, so an override can be undone (#1362, #1363).
- _read_tcp_options(size)[source]¶
Read TCP option list.
- Parameters:
size (
int) – length of option list- Return type:
- Returns:
Extracted TCP options.
- Raises:
ProtocolError – If the options run past
size.
- _make_tcp_options(options, padding=b'')[source]¶
Make options for TCP.
- Parameters:
- Return type:
- Returns:
Tuple of options and total length of options.
- Raises:
ProtocolError – If an option’s kind is a name, a
bool, or a code the 8-bit kind octet cannot carry (#2594), if an option given as raw octets is empty (#2708), or if an option maker rejects its option, e.g. a user timeout too large for 15 bits of minutes, an MPTCPsubtypeor an alternate checksumalgorithmgiven by name, or an MPTCP option whose fields, or the segment’s flags, it cannot encode.FieldValueError – If an ADD_ADDR
addris aboolor not a valid IP address.
Note
The options are emitted in the given order,
NOPandEOOLincluded, so that a parsed option list re-emits the same octets.paddingfollows them as given if they end withEOOL, and is dropped otherwise. Alignment is added only once, after that, when the list does not end on a 32-bit boundary: zero octets if the list already ends withEOOL, otherwiseNOPoptions followed by anEOOL.
- _read_mode_donone(schema, *, options)[source]¶
Read TCP unassigned option.
- Parameters:
schema (
UnassignedOption) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mode_eool(schema, *, options)[source]¶
Read TCP End of Option List option.
Structure of TCP end of option list option [RFC 793]:
+--------+ |00000000| +--------+ Kind=0
- Parameters:
schema (
EndOfOptionList) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mode_nop(schema, *, options)[source]¶
Read TCP No Operation option.
Structure of TCP no-operation option [RFC 793]:
+--------+ |00000001| +--------+ Kind=1
- Parameters:
schema (
NoOperation) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mode_mss(schema, *, options)[source]¶
Read TCP max segment size option.
Structure of TCP maximum segment size option [RFC 793]:
+--------+--------+---------+--------+ |00000010|00000100| max seg size | +--------+--------+---------+--------+ Kind=2 Length=4
- Parameters:
schema (
MaximumSegmentSize) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
4.
- _read_mode_ws(schema, *, options)[source]¶
Read TCP window scale option.
Structure of TCP window scale option [RFC 7323]:
+---------+---------+---------+ | Kind=3 |Length=3 |shift.cnt| +---------+---------+---------+ 1 1 1- Parameters:
schema (
WindowScale) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
3.
- _read_mode_sackpmt(schema, *, options)[source]¶
Read TCP SACK permitted option.
Structure of TCP SACK permitted option [RFC 2018]:
+---------+---------+ | Kind=4 | Length=2| +---------+---------+
- Parameters:
schema (
SACKPermitted) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
2.
- _read_mode_sack(schema, *, options)[source]¶
Read TCP SACK option.
Structure of TCP SACK option [RFC 2018]:
+--------+--------+ | Kind=5 | Length | +--------+--------+--------+--------+ | Left Edge of 1st Block | +--------+--------+--------+--------+ | Right Edge of 1st Block | +--------+--------+--------+--------+ | | / . . . / | | +--------+--------+--------+--------+ | Left Edge of nth Block | +--------+--------+--------+--------+ | Right Edge of nth Block | +--------+--------+--------+--------+- Parameters:
schema (
SACK) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT a multiple of
8plus2.
- _read_mode_echo(schema, *, options)[source]¶
Read TCP echo option.
Structure of TCP echo option [RFC 1072]:
+--------+--------+--------+--------+--------+--------+ | Kind=6 | Length | 4 bytes of info to be echoed | +--------+--------+--------+--------+--------+--------+
- Parameters:
schema (
Echo) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
6.
- _read_mode_echore(schema, *, options)[source]¶
Read TCP echo reply option.
Structure of TCP echo reply option [RFC 1072]:
+--------+--------+--------+--------+--------+--------+ | Kind=7 | Length | 4 bytes of echoed info | +--------+--------+--------+--------+--------+--------+
- Parameters:
schema (
EchoReply) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
6.
- _read_mode_ts(schema, *, options)[source]¶
Read TCP timestamps option.
Structure of TCP timestamp option [RFC 7323]:
+-------+-------+---------------------+---------------------+ |Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)| +-------+-------+---------------------+---------------------+ 1 1 4 4- Parameters:
schema (
Timestamps) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
10.
- _read_mode_poc(schema, *, options)[source]¶
Read TCP partial order connection permitted option.
Structure of TCP
POC-Permittedoption [RFC 1693][RFC 6247]:+-----------+-------------+ | Kind=9 | Length=2 | +-----------+-------------+
- Parameters:
schema (
PartialOrderConnectionPermitted) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
2.
- _read_mode_pocsp(schema, *, options)[source]¶
Read TCP partial order connection service profile option.
Structure of TCP
POC-SPoption [RFC 1693][RFC 6247]:1 bit 1 bit 6 bits +----------+----------+------------+----------+--------+ | Kind=10 | Length=3 | Start_flag | End_flag | Filler | +----------+----------+------------+----------+--------+
- Parameters:
schema (
PartialOrderServiceProfile) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
3.
- _read_mode_cc(schema, *, options)[source]¶
Read TCP connection count option.
Structure of TCP
CCoption [RFC 1644]:+--------+--------+--------+--------+--------+--------+ |00001011|00000110| Connection Count: SEG.CC | +--------+--------+--------+--------+--------+--------+ Kind=11 Length=6
- Parameters:
schema (
CC) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
6.
- _read_mode_ccnew(schema, *, options)[source]¶
Read TCP connection count (new) option.
Structure of TCP
CC.NEWoption [RFC 1644]:+--------+--------+--------+--------+--------+--------+ |00001100|00000110| Connection Count: SEG.CC | +--------+--------+--------+--------+--------+--------+ Kind=12 Length=6
- Parameters:
schema (
CCNew) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
6.
- _read_mode_ccecho(schema, *, options)[source]¶
Read TCP connection count (echo) option.
Structure of TCP
CC.ECHOoption [RFC 1644]:+--------+--------+--------+--------+--------+--------+ |00001101|00000110| Connection Count: SEG.CC | +--------+--------+--------+--------+--------+--------+ Kind=13 Length=6
- Parameters:
schema (
CCEcho) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
6.
- _read_mode_chkreq(schema, *, options)[source]¶
Read TCP Alternate Checksum Request option.
Structure of TCP
CHKSUM-REQ[RFC 1146][RFC 6247]:+----------+----------+----------+ | Kind=14 | Length=3 | chksum | +----------+----------+----------+
- Parameters:
schema (
AlternateChecksumRequest) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
3.
- _read_mode_chksum(schema, *, options)[source]¶
Read Alternate Checksum Data option.
Structure of TCP
CHKSUM[RFC 1146][RFC 6247]:+---------+---------+---------+ +---------+ | Kind=15 |Length=N | data | ... | data | +---------+---------+---------+ +---------+
- Parameters:
schema (
AlternateChecksumData) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mode_sig(schema, *, options)[source]¶
Read MD5 Signature option.
Structure of TCP
SIGoption [RFC 2385]:+---------+---------+-------------------+ | Kind=19 |Length=18| MD5 digest... | +---------+---------+-------------------+ | | +---------------------------------------+ | | +---------------------------------------+ | | +-------------------+-------------------+ | | +-------------------+
- Parameters:
schema (
MD5Signature) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
18.
- _read_mode_qs(schema, *, options)[source]¶
Read Quick-Start Response option.
Structure of TCP
QSopt[RFC 4782]:0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Kind | Length=8 | Resv. | Rate | TTL Diff | | | | |Request| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QS Nonce | R | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Parameters:
schema (
QuickStartResponse) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
8.
- _read_mode_timeout(schema, *, options)[source]¶
Read User Timeout option.
Structure of TCP
TIMEOUT[RFC 5482]:0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Kind = 28 | Length = 4 |G| User Timeout | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Parameters:
schema (
UserTimeout) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
4.
- _read_mode_ao(schema, *, options)[source]¶
Read Authentication option.
Structure of TCP
AOopt[RFC 5925]:+------------+------------+------------+------------+ | Kind=29 | Length | KeyID | RNextKeyID | +------------+------------+------------+------------+ | MAC ... +-----------------------------------... ...-----------------+ ... MAC (con't) | ...-----------------+
- Parameters:
schema (
Authentication) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT larger than or equal to
4.
- _read_mode_mp(schema, *, options)[source]¶
Read Multipath TCP option.
Structure of
MP-TCP[RFC 8684]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----------------------+ | Kind | Length |Subtype| | +---------------+---------------+-------+ | | Subtype-specific data | | (variable length) | +---------------------------------------------------------------+
- Parameters:
schema (
MPTCP) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mptcp_unknown(schema, *, options)[source]¶
Read unknown MPTCP subtype.
- Parameters:
schema (
MPTCPUnknown) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- _read_mptcp_capable(schema, *, options)[source]¶
Read Multipath Capable option.
Structure of
MP_CAPABLE[RFC 8684]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-------+---------------+ | Kind | Length |Subtype|Version|A|B|C|D|E|F|G|H| +---------------+---------------+-------+-------+---------------+ | Option Sender's Key (64 bits) | | (if option Length > 4) | | | +---------------------------------------------------------------+ | Option Receiver's Key (64 bits) | | (if option Length > 12) | | | +-------------------------------+-------------------------------+ | Data-Level Length (16 bits) | Checksum (16 bits, optional) | +-------------------------------+-------------------------------+
- Parameters:
schema (
MPTCPCapable) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
4,12,20,22or24.
- _read_mptcp_join(schema, *, options)[source]¶
Read Join Connection option.
- Parameters:
schema (
MPTCPJoin) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the segment carries neither SYN nor ACK.
- _read_mptcp_dss(schema, *, options)[source]¶
Read Data Sequence Signal (Data ACK and Data Sequence Mapping) option.
Structure of
DSS[RFC 8684, section 3.3, figure 9]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+----------------------+ | Kind | Length |Subtype| (reserved) |F|m|M|a|A| +---------------+---------------+-------+----------------------+ | | | Data ACK (4 or 8 octets, depending on flags) | | | +--------------------------------------------------------------+ | | | Data sequence number (4 or 8 octets, depending on flags) | | | +--------------------------------------------------------------+ | Subflow Sequence Number (4 octets) | +-------------------------------+------------------------------+ | Data-Level Length (2 octets) | Checksum (2 octets) | +-------------------------------+------------------------------+
- Parameters:
schema (
MPTCPDSS) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is not the one the
A,a,Mandmflags give, or, withMset, that plus the 2-octet checksum.
Note
The reserved field spans the 4 low bits of the subtype octet and the 3 high bits of the flags octet; it is kept as one 7-bit value. The checksum is absent when the option length leaves no room for it, i.e., when checksums were not negotiated.
Changed in version 1.6.0: A length the flags do not give is refused, rather than read with the missing fields as zeros or the extra octets dropped (#2669).
- _read_mptcp_addaddr(schema, *, options)[source]¶
Read Add Address option.
Structure of
ADD_ADDR[RFC 8684, section 3.4.1, figure 12]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-------+---------------+ | Kind | Length |Subtype|(rsv)|E| Address ID | +---------------+---------------+-------+-------+---------------+ | Address (IPv4: 4 octets / IPv6: 16 octets) | +-------------------------------+-------------------------------+ | Port (2 octets, optional) | | +-------------------------------+ | | Truncated HMAC (8 octets, if E=0) | | +-------------------------------+ | | +-------------------------------+
- Parameters:
schema (
MPTCPAddAddress) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is not one of the RFC 8684 lengths.
Note
The address family, the port and the HMAC all follow from the option length, never from the
Eflag, so an RFC 6824 option, whoseIPVernibble overlaps the reserved bits andE, parses the same way and round-trips unchanged.
- _read_mptcp_remove(schema, *, options)[source]¶
Read Remove Address option.
Structure of
REMOVE_ADDR[RFC 8684, section 3.4.2, figure 13]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-------+---------------+ | Kind | Length = 3+n |Subtype|(resvd)| Address ID | ... +---------------+---------------+-------+-------+---------------+ (followed by n-1 Address IDs, if required)- Parameters:
schema (
MPTCPRemoveAddress) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is smaller than 3.
Note
Length = 3 + n, per the figure above: the 3 isKind(1) +Length(1) + subtype-and-reserved (1), and each of the n Address IDs is one further octet.addr_idsizes its list aspkt['length'] - 3from exactly this, so the declared length governs the parse as well as the pack.The guard permits
3, i.e.n = 0, which the figure does not describe – it shows one Address ID plus “n-1 Address IDs, if required”. It is left permissive: a zero-ID REMOVE_ADDR round-trips honestly, and rejecting an empty list would be a behaviour change.
- _read_mptcp_prio(schema, *, options)[source]¶
Read Change Subflow Priority option.
Structure of
MP_PRIO[RFC 6824, section 3.3.8, figure 11]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----+-+--------------+ | Kind | Length |Subtype| |B| AddrID (opt) | +---------------+---------------+-------+-----+-+--------------+
- Parameters:
schema (
MPTCPPriority) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is neither 3 nor 4.
Note
The figure above is RFC 6824’s, the one with an Address ID, as this method accepts both forms. RFC 8684 section 3.3.8 figure 11 draws MP_PRIO as 3 octets –
Kind(1) +Length(1) + subtype/reserved/B(1) – since its section 5 “specifies the removal of the AddrID field [RFC6824] in the MP_PRIO option”, closing an attack that could force a subflow into backup mode. The 4-octet form is legacy, and the guard stays permissive so that traffic carrying it still parses.On the construction side,
MPTCPPriority’saddr_idis conditional onlengthbeing 4, solengthhas to follow whether the caller supplied an Address ID.
- _read_mptcp_fail(schema, *, options)[source]¶
Read Fallback option.
Structure of
MP_FAIL[RFC 8684, section 3.7, figure 16]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+----------------------+ | Kind | Length=12 |Subtype| (reserved) | +---------------+---------------+-------+----------------------+ | | | Data Sequence Number (8 octets) | | | +--------------------------------------------------------------+
- Parameters:
schema (
MPTCPFallback) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is NOT 12.
- _read_mptcp_fastclose(schema, options)[source]¶
Read Fast Close option.
Structure of
MP_FASTCLOSE[RFC 8684, section 3.5, figure 14]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----------------------+ | Kind | Length |Subtype| (reserved) | +---------------+---------------+-------+-----------------------+ | Option Receiver's Key | | (64 bits) | | | +---------------------------------------------------------------+
- Parameters:
schema (
MPTCPFastclose) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the length is NOT 12.
Note
The figure above is RFC 8684 section 3.5 figure 14, and the option it draws is 12 octets:
Kind(1) +Length(1) + subtype-and-reserved (2, being 4 subtype bits and 12 reserved) + the option receiver’s key (64 bits, 8). The guard,_make_mptcp_fastcloseand the schema must all agree on 12, the schema reading the 12 reserved bits along with the subtype.
- _read_mode_fastopen(schema, *, options)[source]¶
Read Fast Open option.
Structure of TCP
FASTOPEN[RFC 7413]:+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Kind | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Cookie ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Parameters:
schema (
FastOpenCookie) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT valid.
- _make_mode_donone(code, opt=None, *, data=b'', **kwargs)[source]¶
Make TCP unassigned option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- _make_mode_eool(code, opt=None, **kwargs)[source]¶
Make TCP End of Option List option.
- Parameters:
code (
Option) – option codeopt (
EndOfOptionList|None) – option data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- _make_mode_nop(code, opt=None, **kwargs)[source]¶
Make TCP NoOperation option.
- Parameters:
code (
Option) – option codeopt (
NoOperation|None) – option data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- _make_mode_mss(code, opt=None, *, mss=65535, **kwargs)[source]¶
Make TCP maximum segment size option.
- Parameters:
code (
Option) – option codeopt (
MaximumSegmentSize|None) – option datamss (
int) – maximum segment size**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
mssdoes not fit 16 bits.
- _make_mode_ws(code, opt=None, *, shift=0, **kwargs)[source]¶
Make TCP window scale option.
- Parameters:
code (
Option) – option codeopt (
WindowScale|None) – option datashift (
int) – window scale shift count**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
shiftdoes not fit 8 bits.
- _make_mode_sackpmt(code, opt=None, **kwargs)[source]¶
Make TCP SACK permitted option.
- Parameters:
code (
Option) – option codeopt (
SACKPermitted|None) – option data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- _make_mode_echo(code, opt=None, *, data=b'\x00\x00\x00\x00', **kwargs)[source]¶
Make TCP echo option.
- _make_mode_echore(code, opt=None, *, data=b'\x00\x00\x00\x00', **kwargs)[source]¶
Make TCP echo reply option.
- _make_mode_ts(code, opt=None, *, tsval=0, tsecr=0, **kwargs)[source]¶
Make TCP timestamps option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
tsvalortsecrdoes not fit 32 bits.
- _make_mode_poc(code, opt=None, **kwargs)[source]¶
Make TCP partial order connection option.
- Parameters:
code (
Option) – option codeopt (
PartialOrderConnectionPermitted|None) – option data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- _make_mode_pocsp(code, opt=None, *, start=False, end=False, reserved=0, **kwargs)[source]¶
Make TCP partial order connection service profile option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 6 bits.
- _make_mode_ccnew(code, opt=None, *, count=0, **kwargs)[source]¶
Make TCP connection count new option.
- _make_mode_ccecho(code, opt=None, *, count=0, **kwargs)[source]¶
Make TCP connection count echo option.
- _make_mode_chkreq(code, opt=None, *, algorithm=Checksum.TCP_checksum, **kwargs)[source]¶
Make TCP alternate checksum request option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
algorithmis a name, abool, or a member or code that does not fit 8 bits.
- _make_mode_chksum(code, opt=None, *, data=b'', **kwargs)[source]¶
Make TCP alternate checksum data option.
- Parameters:
code (
Option) – option codeopt (
AlternateChecksumData|None) – option datadata (
bytes) – checksum data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- _make_mode_sig(code, opt=None, *, digest=bytes(16), **kwargs)[source]¶
Make TCP MD5 signature option.
- Parameters:
code (
Option) – option codeopt (
MD5Signature|None) – option datadigest (
bytes) – digest**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
digestis not 16 octets.
- _make_mode_qs(code, opt=None, *, rate=0, diff=0, nonce=0, reserved=0, nonce_reserved=0, **kwargs)[source]¶
Make TCP quick start response option.
- Parameters:
code (
Option) – option codeopt (
QuickStartResponse|None) – option datarate (
int) – rate (in kbps), rounded down to the nearest rate the four-bit rate code carries (RFC 4782 Section 4.2)diff (
timedelta|int) – TTL Diff, the IP TTL minus the QS TTL, modulo 256 (RFC 4782 Section 4.2); atimedeltais taken as its whole secondsnonce (
int) – nonce valuereserved (
int) – reserved bits before the rate request (Resv., 4 bits)nonce_reserved (
int) – reserved bits after the nonce (R, 2 bits)**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If the rate code cannot carry
rate, ornonce,reservedornonce_reserveddoes not fit its field.
- _make_mode_timeout(code, opt=None, *, timeout=0, granularity=None, **kwargs)[source]¶
Make TCP user timeout option.
- Parameters:
code (
Option) – option codeopt (
UserTimeout|None) – option datatimeout (
timedelta|int) – timeout value (in seconds, if anint)granularity (
bool|None) – preferred unit, minutes (Gset) or seconds; it is kept only while the value still fits in it – seconds within 15 bits, minutes as a whole number of them. Otherwise, and if not given, seconds are used when they fit in 15 bits, and minutes if not.**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If the timeout is a
bool, is neither anintnor atimedelta, is negative, or does not fit in 15 bits of minutes.
- _make_mode_ao(code, opt=None, *, key_id=0, next_key_id=0, mac=b'', **kwargs)[source]¶
Make TCP authentication option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
key_idornext_key_iddoes not fit 8 bits.
- _make_mode_mp(code, opt=None, *, subtype=MPTCPOption.MP_CAPABLE, **kwargs)[source]¶
Make multipath TCP option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
subtypeis a name, abool, or a member or code that does not fit 4 bits.
- _make_mptcp_unknown(subtype, opt=None, *, data=b'\x00', **kwargs)[source]¶
Make unknown multipath TCP option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPUnknown|None) – option datadata (
bytes) – option payload data, its first octet the four bits after the subtype**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If the first octet of
datadoes not fit four bits.
- _make_mptcp_capable(subtype, opt=None, *, version=0, flag_req=False, flag_ext=False, flag_deny_join=False, flag_reserved=0, flag_hsa=False, skey=0, rkey=0, dl_len=None, checksum=None, **kwargs)[source]¶
Make multipath TCP capable option.
Each field is present only if every field before it is, which selects one of the five RFC 8684 section 3.1 lengths: 4 (
skey=None), 12 (rkey=None), 20 (dl_len=None), 22 (checksum=None) or 24.- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPCapable|None) – option dataversion (
int) – MPTCP versionflag_req (
bool) – checksum required flagflag_ext (
bool) – extensibility flagflag_deny_join (
bool) – flag for not establishing new subflows to the source addressflag_reserved (
int) – reserved flags (DtoG)flag_hsa (
bool) – use of HMAC-SHA1 (version 0) or HMAC-SHA256 (version 1) flag**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If a field is given without the field before it, or does not fit its width.
- _make_mptcp_join(subtype, opt=None, **kwargs)[source]¶
Make multipath TCP join option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtype**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If the segment’s flags are none of SYN, SYN/ACK and ACK.
- _make_mptcp_dss(subtype, opt=None, *, reserved=0, data_fin=False, ack_wide=None, ack=None, dsn_wide=None, dsn=None, ssn=None, dl_len=None, checksum=None, **kwargs)[source]¶
Make multipath TCP DSS option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypereserved (
int) – reserved bits (7 bits)data_fin (
bool) –DATA_FINflagack_wide (
bool|None) – whether Data ACK is 8 octets; if not given, it is 8 octets only whenackdoes not fit in 4dsn_wide (
bool|None) – whether data sequence number is 8 octets; if not given, it is 8 octets only whendsndoes not fit in 4checksum (
bytes|None) – checksum, orNoneif checksums were not negotiated**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If the mapping fields are given only in part, a 4-octet field is asked to hold a value wider than 32 bits, or a field does not fit its width.
- _make_mptcp_addaddr(subtype, opt=None, *, reserved=None, echo=None, addr_id=0, addr='0.0.0.0', port=None, hmac=None, **kwargs)[source]¶
Make multipath TCP add address option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPAddAddress|None) – option dataaddr_id (
int) – address IDaddr (
IPv4Address|IPv6Address|int|bytes|str) – address**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
hmacis not 8 octets, or is given together withechoset, or a field does not fit its width.FieldValueError – If
addris aboolor not a valid IP address.
Note
RFC 8684 section 3.4.1 allows an ADD_ADDR without the truncated HMAC only as an echo (
Eset). So when none ofreserved,echoandhmacis given, the option is built in the RFC 6824 layout instead, itsIPVernibble taking the place of the reserved bits andE; otherwisereserveddefaults to 0 andechoto whetherhmacis absent. A parsedoptis rebuilt as it was read, without those checks.
- _make_mptcp_remove(subtype, opt=None, *, reserved=0, addr_id=None, **kwargs)[source]¶
Make multipath TCP remove address option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPRemoveAddress|None) – option datareserved (
int) – reserved bits**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 4 bits, or an address ID 8 bits.
- _make_mptcp_prio(subtype, opt=None, *, reserved=0, backup=False, addr_id=None, **kwargs)[source]¶
Make multipath TCP priority option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPPriority|None) – option datareserved (
int) – reserved bitsbackup (
bool) – backup flag**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 3 bits, oraddr_id8 bits.
- _make_mptcp_fail(subtype, opt=None, *, reserved=0, dsn=0, **kwargs)[source]¶
Make multipath TCP fail option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPFallback|None) – option datareserved (
int) – reserved bitsdsn (
int) – data sequence number**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 12 bits, ordsn64 bits.
- _make_mptcp_fastclose(subtype, opt=None, *, reserved=0, key=0, **kwargs)[source]¶
Make multipath TCP fastclose option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPFastclose|None) – option datareserved (
int) – reserved bitskey (
int) – option receiver’s key**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 12 bits, orkey64 bits.
- _make_mode_fastopen(code, opt=None, *, cookie=None, **kwargs)[source]¶
Make TCP Fast Open option.
- Parameters:
- Return type:
- Returns:
Constructed option schema.
- _verify_pseudo_checksum(pseudo)[source]¶
Verify the checksum over the pseudo-header of the enclosing IP layer.
That layer calls this once parsed, see
verify_upper(). A zero checksum, or the pseudo-header’s sum alone, is what checksum offload leaves on the sending host, and isNOT_COMPUTED.
- _read_join_syn(schema, *, options)[source]¶
Read Join Connection option for Initial SYN.
Structure of
MP_JOIN-SYN[RFC 8684, section 3.2, figure 5]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----+-+---------------+ | Kind | Length = 12 |Subtype| |B| Address ID | +---------------+---------------+-------+-----+-+---------------+ | Receiver's Token (32 bits) | +---------------------------------------------------------------+ | Sender's Random Number (32 bits) | +---------------------------------------------------------------+
- Parameters:
schema (
MPTCPJoinSYN) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
12.
- _read_join_synack(schema, options)[source]¶
Read Join Connection option for Responding SYN/ACK.
Structure of
MP_JOIN-SYN/ACK[RFC 8684, section 3.2, figure 6]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----+-+---------------+ | Kind | Length = 16 |Subtype| |B| Address ID | +---------------+---------------+-------+-----+-+---------------+ | | | Sender's Truncated HMAC (64 bits) | | | +---------------------------------------------------------------+ | Sender's Random Number (32 bits) | +---------------------------------------------------------------+
- Parameters:
schema (
MPTCPJoinSYNACK) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
16.
Note
The accepted length is
16, as in the figure above (RFC 8684 section 3.2 figure 6) and in whatMPTCPJoinSYNACKpacks and unpacks:Kind(1) +Length(1) + subtype/flags (1) +Address ID(1) + the truncated HMAC (8) + the random number (4).
- _read_join_ack(schema, *, options)[source]¶
Read Join Connection option for Third ACK.
Structure of
MP_JOIN-ACK[RFC 8684, section 3.2, figure 7]:1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------+-----------------------+ | Kind | Length = 24 |Subtype| (reserved) | +---------------+---------------+-------+-----------------------+ | | | | | Sender's HMAC (160 bits) | | | | | +---------------------------------------------------------------+
- Parameters:
schema (
MPTCPJoinACK) – parsed option schemaoptions (
OrderedMultiDict[Option,Option]) – extracted TCP options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If length is NOT
24.
- _make_join_syn(subtype, opt=None, *, reserved=0, backup=False, addr_id=0, token=0, nonce=0, **kwargs)[source]¶
Make multipath TCP join SYN option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPJoinSYN|None) – option datareserved (
int) – reserved bitsbackup (
bool) – backup flagaddr_id (
int) – address IDtoken (
int) – receiver’s tokennonce (
int) – sender’s random number**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If a field does not fit its width.
- _make_join_synack(subtype, opt=None, *, reserved=0, backup=False, addr_id=0, hmac=bytes(8), nonce=0, **kwargs)[source]¶
Make multipath TCP join SYN/ACK option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPJoinSYNACK|None) – option datareserved (
int) – reserved bitsbackup (
bool) – backup flagaddr_id (
int) – address IDhmac (
bytes) – sender’s truncated HMACnonce (
int) – sender’s random number**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If a field does not fit its width, or
hmacis not eight octets.
- _make_join_ack(subtype, opt=None, *, reserved=0, hmac=bytes(20), **kwargs)[source]¶
Make multipath TCP join ACK option.
- Parameters:
subtype (
MPTCPOption) – MPTCP subtypeopt (
MPTCPJoinACK|None) – option datareserved (
int) – reserved bitshmac (
bytes) – sender’s HMAC**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructed option schema.
- Raises:
ProtocolError – If
reserveddoes not fit 12 bits, orhmacis not 20 octets.
Header Schemas¶
Removed in version 1.6.0: pcapkit.protocols.schema.transport.tcp, with no alias: the module moved here
(#2534).
- pcapkit.protocols.transport.tcp.schema.TCP_MIN_HEADER_LEN = 20¶
Minimum length of a TCP header, i.e. the fixed part with no options, RFC 9293 Section 3.1. The one home of this value (#1739), here so that the schema’s option length and the protocol modules read the same one; it is fixed by the RFC, so it is never configurable.
Added in version 1.5.0.
- pcapkit.protocols.transport.tcp.schema.TCP_DATA_OFFSET_OCTET = 12¶
Offset of the octet whose high four bits are the Data Offset field – the header length in 32-bit words – within a TCP header, RFC 9293 Section 3.1. The one home of this value (#1739), beside
TCP_MIN_HEADER_LEN; it is fixed by the RFC, so it is never configurable.Added in version 1.5.0.
- class pcapkit.protocols.transport.tcp.schema.TCP(srcport=NO_VALUE, dstport=NO_VALUE, seq=NO_VALUE, ack=NO_VALUE, offset=NO_VALUE, flags=NO_VALUE, window=NO_VALUE, checksum=NO_VALUE, urgent=NO_VALUE, options=NO_VALUE, padding=NO_VALUE, payload=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
SchemaHeader schema for TCP packet.
- offset: OffsetFlag = <BitField offset>¶
Data offset.
- class pcapkit.protocols.transport.tcp.schema.Option(*args, **kwargs)[source]¶
Bases:
EnumSchema[Option]Header schema for TCP options.
- class pcapkit.protocols.transport.tcp.schema.UnassignedOption(kind=NO_VALUE, length=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP unassigned options.
- class pcapkit.protocols.transport.tcp.schema.EndOfOptionList(kind=NO_VALUE, length=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP end of option list.
- class pcapkit.protocols.transport.tcp.schema.NoOperation(kind=NO_VALUE, length=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP no operation.
- class pcapkit.protocols.transport.tcp.schema.MaximumSegmentSize(kind=NO_VALUE, length=NO_VALUE, mss=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP max segment size option.
- class pcapkit.protocols.transport.tcp.schema.WindowScale(kind=NO_VALUE, length=NO_VALUE, shift=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP window scale option.
- class pcapkit.protocols.transport.tcp.schema.SACKPermitted(kind=NO_VALUE, length=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP SACK permitted option.
- class pcapkit.protocols.transport.tcp.schema.SACK(kind=NO_VALUE, length=NO_VALUE, sack=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP SACK option.
- class pcapkit.protocols.transport.tcp.schema.SACKBlock(left=NO_VALUE, right=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
SchemaHeader schema for TCP SACK option data.
- class pcapkit.protocols.transport.tcp.schema.Echo(kind=NO_VALUE, length=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP echo option.
- class pcapkit.protocols.transport.tcp.schema.EchoReply(kind=NO_VALUE, length=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP echo reply option.
- class pcapkit.protocols.transport.tcp.schema.Timestamps(kind=NO_VALUE, length=NO_VALUE, value=NO_VALUE, reply=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP timestamps option.
Changed in version 1.1.0: Renamed from
Timestamp, whichpcapkit.protocols.schemaexported asTCP_Timestamp; the export isTCP_Timestamps.
- class pcapkit.protocols.transport.tcp.schema.PartialOrderConnectionPermitted(kind=NO_VALUE, length=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP partial order connection permitted option.
- class pcapkit.protocols.transport.tcp.schema.PartialOrderServiceProfile(kind=NO_VALUE, length=NO_VALUE, profile=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP partial order connection service profile option.
Changed in version 1.1.0: Renamed from
PartialOrderConnectionProfile, whichpcapkit.protocols.schemaexported asTCP_PartialOrderConnectionProfile; the export isTCP_PartialOrderServiceProfile.- profile: POCProfile = <BitField profile>¶
Profile data.
- class pcapkit.protocols.transport.tcp.schema.CC(kind=NO_VALUE, length=NO_VALUE, count=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP CC option.
- class pcapkit.protocols.transport.tcp.schema.CCNew(kind=NO_VALUE, length=NO_VALUE, count=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP connection count (new) option.
- class pcapkit.protocols.transport.tcp.schema.CCEcho(kind=NO_VALUE, length=NO_VALUE, count=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP connection count (echo) option.
- class pcapkit.protocols.transport.tcp.schema.AlternateChecksumRequest(kind=NO_VALUE, length=NO_VALUE, algorithm=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP alternate checksum request option.
- class pcapkit.protocols.transport.tcp.schema.AlternateChecksumData(kind=NO_VALUE, length=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP alternate checksum data option.
- class pcapkit.protocols.transport.tcp.schema.MD5Signature(kind=NO_VALUE, length=NO_VALUE, digest=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP MD5 signature option.
- class pcapkit.protocols.transport.tcp.schema.QuickStartResponse(kind=NO_VALUE, length=NO_VALUE, flags=NO_VALUE, diff=NO_VALUE, nonce=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP quick start response option.
- flags: QuickStartFlags = <BitField flags>¶
Flags.
- nonce: QuickStartNonce = <BitField nonce>¶
QS nonce.
- class pcapkit.protocols.transport.tcp.schema.UserTimeout(kind=NO_VALUE, length=NO_VALUE, info=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP user timeout option.
- info: TimeoutInfo = <BitField info>¶
Granularity and user timeout.
- class pcapkit.protocols.transport.tcp.schema.Authentication(kind=NO_VALUE, length=NO_VALUE, key_id=NO_VALUE, next_key_id=NO_VALUE, mac=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP authentication option.
- class pcapkit.protocols.transport.tcp.schema.FastOpenCookie(kind=NO_VALUE, length=NO_VALUE, cookie=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
OptionHeader schema for TCP Fast Open option.
- class pcapkit.protocols.transport.tcp.schema._MPTCP(test=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
SchemaHeader schema for Multipath TCP options in a generic representation.
- test: MPTCPSubtypeTest = <ForwardMatchField test>¶
Subtype and flags.
The forward match is anchored at the option’s first octet, not after the option header: this schema is what
Option.registrydispatches to forkind == Multipath_TCPand, unlike the other option schemas, it does not inheritOption, so it consumeskindandlengthitself. In this 3-octet windowlengthis bits 8-15 and the subtype bits 16-19 (RFC 8684 section 3).
- class pcapkit.protocols.transport.tcp.schema.MPTCP(*args, **kwargs)[source]¶
Bases:
EnumSchema[MPTCPOption]Header schema for Multipath TCP options.
Changed in version 1.1.0: An
EnumSchemakeyed onMPTCPOptionrather than a subclass ofOption, which registers_MPTCPunderMultipath_TCPinstead.Each subtype schema is handed the whole option from its first octet, through
mptcp_data_selector, so a subclass’stestfield starts at the third octet, afterkindandlength, and its conditions can readpkt['length'].- subtype: MPTCPOption¶
MPTCP subtype.
- class pcapkit.protocols.transport.tcp.schema.MPTCPUnknown(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, data=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for unknown Multipath TCP option.
- test: MPTCPSubtypeUnknown = <BitField test>¶
Subtype and data.
- class pcapkit.protocols.transport.tcp.schema.MPTCPCapable(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, flags=NO_VALUE, skey=NO_VALUE, rkey=NO_VALUE, dl_len=NO_VALUE, checksum=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP capable option.
- test: MPTCPSubtypeCapable = <BitField test>¶
Subtype and version.
- flags: MPTCPCapableFlags = <BitField flags>¶
Flags.
- class pcapkit.protocols.transport.tcp.schema.MPTCPJoin(*args, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP join option.
- class pcapkit.protocols.transport.tcp.schema.MPTCPJoinSYN(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, addr_id=NO_VALUE, token=NO_VALUE, nonce=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPJoinHeader schema for Multipath TCP join option for
SYNconnection.- test: MPTCPSubtypeJoin = <BitField test>¶
Subtype and flags.
- class pcapkit.protocols.transport.tcp.schema.MPTCPJoinSYNACK(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, addr_id=NO_VALUE, hmac=NO_VALUE, nonce=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPJoinHeader schema for Multipath TCP join option for
SYN/ACKconnection.- test: MPTCPSubtypeJoin = <BitField test>¶
Subtype and flags.
- class pcapkit.protocols.transport.tcp.schema.MPTCPJoinACK(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, hmac=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPJoinHeader schema for Multipath TCP join option for
ACKconnection.- test: MPTCPSubtype = <BitField test>¶
Subtype and reserved.
- class pcapkit.protocols.transport.tcp.schema.MPTCPDSS(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, flags=NO_VALUE, ack=NO_VALUE, dsn=NO_VALUE, ssn=NO_VALUE, dl_len=NO_VALUE, checksum=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP DSS option.
- test: MPTCPSubtype = <BitField test>¶
Subtype and reserved.
- flags: MPTCPDSSFlags = <BitField flags>¶
Flags.
- ack: int = <SwitchField ack>¶
Data ACK.
4 octets when
Ais set, 8 whenais set as well, absent otherwise – RFC 8684 section 3.3 figure 9. Both the presence test and the width live inmptcp_dss_ack_selector(), whose note explains why the switch form is used.
- dsn: int = <SwitchField dsn>¶
Data sequence number.
4 octets when
Mis set, 8 whenmis set as well, absent otherwise – RFC 8684 section 3.3 figure 9. Seemptcp_dss_dsn_selector().
- checksum: bytes = <ConditionalField checksum>¶
Checksum (if negotiated, see
mptcp_dss_checksum()).
- class pcapkit.protocols.transport.tcp.schema.MPTCPAddAddress(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, addr_id=NO_VALUE, address=NO_VALUE, port=NO_VALUE, hmac=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP add address option.
- test: MPTCPSubtypeAddAddress = <BitField test>¶
Subtype and flags.
- address: IPv4Address | IPv6Address = <SwitchField address>¶
Address.
- class pcapkit.protocols.transport.tcp.schema.MPTCPRemoveAddress(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, addr_id=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP remove address option.
- test: MPTCPSubtype = <BitField test>¶
Subtype and reserved.
- class pcapkit.protocols.transport.tcp.schema.MPTCPPriority(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, addr_id=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP priority option.
- test: MPTCPSubtypePriority = <BitField test>¶
Subtype.
- class pcapkit.protocols.transport.tcp.schema.MPTCPFallback(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, dsn=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP fallback option.
- test: MPTCPSubtype = <BitField test>¶
Subtype and reserved.
RFC 8684 section 3.7 figure 16 follows the subtype’s 4 bits with 12 reserved bits, so the Data Sequence Number starts at the fifth octet of the 12-octet option.
- class pcapkit.protocols.transport.tcp.schema.MPTCPFastclose(kind=NO_VALUE, length=NO_VALUE, test=NO_VALUE, key=NO_VALUE, *, __packet__=None, **kwargs)[source]¶
Bases:
MPTCPHeader schema for Multipath TCP fastclose option.
- test: MPTCPSubtype = <BitField test>¶
Subtype and reserved.
RFC 8684 section 3.5 figure 14 spends a whole 32-bit row on
Kind/Length/Subtype/(reserved), i.e. the subtype’s 4 bits are followed by 12 reserved bits, not 4 – so the subtype-and-reserved part is 2 octets and the option is 12 octets in total.
Type Stubs¶
- class pcapkit.protocols.transport.tcp.schema.OffsetFlag[source]¶
Bases:
TypedDictTCP offset field flag.
- class pcapkit.protocols.transport.tcp.schema.POCProfile[source]¶
Bases:
TypedDictTCP partial order connection service profile.
- class pcapkit.protocols.transport.tcp.schema.QuickStartFlags[source]¶
Bases:
TypedDictTCP quick start flags.
- class pcapkit.protocols.transport.tcp.schema.QuickStartNonce[source]¶
Bases:
TypedDictTCP quick start nonce.
- class pcapkit.protocols.transport.tcp.schema.TimeoutInfo[source]¶
Bases:
TypedDictUser timeout information.
- class pcapkit.protocols.transport.tcp.schema.MPTCPSubtypeTest[source]¶
Bases:
TypedDictTCP MPTCP subtype.
- class pcapkit.protocols.transport.tcp.schema.MPTCPSubtypeUnknown[source]¶
Bases:
TypedDictTCP unknown MPTCP subtype field.
- class pcapkit.protocols.transport.tcp.schema.MPTCPSubtypeCapable[source]¶
Bases:
TypedDictMPTCP Capable subtype field.
- class pcapkit.protocols.transport.tcp.schema.MPTCPCapableFlags[source]¶
Bases:
TypedDictMPTCP Capable flags.
- class pcapkit.protocols.transport.tcp.schema.MPTCPSubtypeJoin[source]¶
Bases:
TypedDictMPTCP Join subtype field.
- class pcapkit.protocols.transport.tcp.schema.MPTCPSubtype[source]¶
Bases:
TypedDictMPTCP subtype field.
- class pcapkit.protocols.transport.tcp.schema.MPTCPDSSFlags[source]¶
Bases:
TypedDictMPTCP-DSS flags.
Auxiliary Functions¶
- pcapkit.protocols.transport.tcp.schema.mptcp_data_selector(pkt)[source]¶
Selector function for
_MPTCP.datafield.- Parameters:
- Return type:
- Returns:
A
SchemaFieldwrappedMPTCPsubclass instance.- Raises:
FieldError – If an MP_JOIN option is carried by a segment with neither SYN nor ACK set.
- pcapkit.protocols.transport.tcp.schema.mptcp_add_address_selector(pkt)[source]¶
Selector function for
MPTCPAddAddress.addressfield.- Parameters:
- Return type:
- Returns:
An
IPv4AddressFieldinstance if the option length is one of the IPv4 lengths, or anIPv6AddressFieldinstance if it is one of the IPv6 lengths.- Raises:
FieldError – If the option length is neither.
Note
RFC 8684 section 3.4.1 figure 12 has no IP version field: the address family follows from the option length, which is 8 or 20 for an IPv4 or IPv6 address, plus 2 with the port, plus 8 with the truncated HMAC. The RFC 6824
IPVernibble occupies the bits RFC 8684 reserves and spends onE, and its lengths are the HMAC-less ones, so both layouts are read the same way.
- pcapkit.protocols.transport.tcp.schema.mptcp_dss_checksum(pkt)[source]¶
Condition function for
MPTCPDSS.checksumfield.RFC 8684 section 3.3 makes the checksum part of the mapping only when checksums were negotiated, so a mapping without one is 2 octets shorter and only the option length tells the two forms apart.
- pcapkit.protocols.transport.tcp.schema.mptcp_dss_ack_selector(pkt)[source]¶
Selector function for
MPTCPDSS.ackfield.RFC 8684 section 3.3 figure 9 gives the Data ACK as “4 or 8 octets, depending on flags”: present only when
Ais set, and 8 octets wide only whenais also set – “a = Data ACK is 8 octets (if not set, Data ACK is 4 octets)”.- Parameters:
- Return type:
- Returns:
A
NoValueFieldinstance ifAis clear, since the field is then absent from the wire; otherwise aUInt64Fieldinstance ifais set, or aUInt32Fieldinstance if it is clear.
Note
This is a
SwitchFieldselector rather than aConditionalFieldwrappingNumberField(length=lambda pkt: ...). An unextended Data ACK is 4 octets, so a width lambda returning0for it would leave thelengthoctet counting 4 octets that were never packed.The
ConditionalFieldform could express this field correctly, since a callable-lengthNumberFieldpacks and unpacks both the 4- and the 8-octet form, and wire absence is no obstacle:MPTCPDSS.ssn,MPTCPDSS.dl_lenandMPTCPDSS.checksumare each aConditionalFieldon the siblingMflag (the checksum on the option length as well). TheSwitchFieldform is kept for a narrower reason about composition. AConditionalField’slengthforwards to the wrapped field unconditionally, never consulting the condition, so reading it while the condition is false – the wrapped field then still unresolved, at its-1placeholder – raisesstruct.error: bad char in struct format. Nothing here meets that only becauseSchema’spackandunpackspecial-caseConditionalFieldby type and skip the wrapped field outright before anylengthis read. ASwitchFieldneeds no such special case: its selector always hands back an already-concrete field,NoValueFieldincluded, so itslengthis safe wherever it is read. Swapping the two would be a behaviour change, not a tidy-up.
- pcapkit.protocols.transport.tcp.schema.mptcp_dss_dsn_selector(pkt)[source]¶
Selector function for
MPTCPDSS.dsnfield.RFC 8684 section 3.3 figure 9 gives the Data Sequence Number as “4 or 8 octets, depending on flags”: present only when
Mis set, and 8 octets wide only whenmis also set – “m = Data Sequence Number is 8 octets (if not set, DSN is 4 octets)”.- Parameters:
- Return type:
- Returns:
A
NoValueFieldinstance ifMis clear, since the field is then absent from the wire; otherwise aUInt64Fieldinstance ifmis set, or aUInt32Fieldinstance if it is clear.
Note
Identical in shape to
mptcp_dss_ack_selector(); see that function’s note for why aSwitchFieldis used in place of aConditionalFieldaround a callable-lengthNumberField.
Data Models¶
Removed in version 1.6.0: pcapkit.protocols.data.transport.tcp, with no alias: the module moved here
(#2534).
- class pcapkit.protocols.transport.tcp.data.TCP(srcport, dstport, seq, ack, hdr_len, flags, window_size, checksum, urgent_pointer)[source]¶
Bases:
ProtocolData model for TCP packet.
- options: OrderedMultiInfo[Option, Option]¶
TCP options.
- checksum_status: ChecksumStatus¶
Outcome of verifying
checksum, present only when the enclosing IP layer verified it underCHECKSUM_VERIFY.
- class pcapkit.protocols.transport.tcp.data.Flags(ns, cwr, ece, urg, ack, psh, rst, syn, fin, reserved)[source]¶
Bases:
DataData model for TCP flags.
- class pcapkit.protocols.transport.tcp.data.Option(*args, **kwargs)[source]¶
Bases:
DataData model for TCP options.
- class pcapkit.protocols.transport.tcp.data.UnassignedOption(kind, length, data)[source]¶
Bases:
OptionData model for unassigned TCP option.
- class pcapkit.protocols.transport.tcp.data.EndOfOptionList(kind, length)[source]¶
Bases:
OptionData model for TCP end of option list option.
- class pcapkit.protocols.transport.tcp.data.NoOperation(kind, length)[source]¶
Bases:
OptionData model for TCP no operation option.
- class pcapkit.protocols.transport.tcp.data.MaximumSegmentSize(kind, length, mss)[source]¶
Bases:
OptionData model for TCP maximum segment size option.
- class pcapkit.protocols.transport.tcp.data.WindowScale(kind, length, shift)[source]¶
Bases:
OptionData model for TCP window scale option.
- class pcapkit.protocols.transport.tcp.data.SACKPermitted(kind, length)[source]¶
Bases:
OptionData model for TCP SACK permitted option.
- class pcapkit.protocols.transport.tcp.data.SACK(kind, length, sack)[source]¶
Bases:
OptionData model for TCP SACK option.
- class pcapkit.protocols.transport.tcp.data.SACKBlock(left, right)[source]¶
Bases:
DataData model for TCP SACK block.
- class pcapkit.protocols.transport.tcp.data.Echo(kind, length, data)[source]¶
Bases:
OptionData model for TCP echo option.
- class pcapkit.protocols.transport.tcp.data.EchoReply(kind, length, data)[source]¶
Bases:
OptionData model for TCP echo reply option.
- class pcapkit.protocols.transport.tcp.data.Timestamps(kind, length, timestamp, echo)[source]¶
Bases:
OptionData model for TCP timestamp option.
Changed in version 1.1.0: Renamed from
Timestamp, whichpcapkit.protocols.dataexported asTCP_Timestamp; the export isTCP_Timestamps.
- class pcapkit.protocols.transport.tcp.data.PartialOrderConnectionPermitted(kind, length)[source]¶
Bases:
OptionData model for TCP partial order connection permitted option.
- class pcapkit.protocols.transport.tcp.data.PartialOrderServiceProfile(kind, length, start, end, reserved)[source]¶
Bases:
OptionData model for TCP partial order connection service profile option.
Changed in version 1.1.0: Renamed from
PartialOrderConnectionProfile, whichpcapkit.protocols.dataexported asTCP_PartialOrderConnectionProfile; the export isTCP_PartialOrderServiceProfile.
- class pcapkit.protocols.transport.tcp.data.CC(kind, length, cc)[source]¶
Bases:
OptionData model for TCP CC option.
- class pcapkit.protocols.transport.tcp.data.CCNew(kind, length, cc)[source]¶
Bases:
OptionData model for TCP CC.NEW option.
- class pcapkit.protocols.transport.tcp.data.CCEcho(kind, length, cc)[source]¶
Bases:
OptionData model for TCP CC.ECHO option.
- class pcapkit.protocols.transport.tcp.data.AlternateChecksumRequest(kind, length, chksum)[source]¶
Bases:
OptionData model for TCP alternate checksum request option.
- class pcapkit.protocols.transport.tcp.data.AlternateChecksumData(kind, length, data)[source]¶
Bases:
OptionData model for TCP alternate checksum data option.
- class pcapkit.protocols.transport.tcp.data.MD5Signature(kind, length, digest)[source]¶
Bases:
OptionData model for TCP MD5 signature option.
- class pcapkit.protocols.transport.tcp.data.QuickStartResponse(kind, length, req_rate, ttl_diff, nonce, reserved, nonce_reserved)[source]¶
Bases:
OptionData model for TCP quick start response option.
- class pcapkit.protocols.transport.tcp.data.UserTimeout(kind, length, timeout, granularity)[source]¶
Bases:
OptionData model for TCP user timeout option.
- class pcapkit.protocols.transport.tcp.data.Authentication(kind, length, key_id, next_key_id, mac)[source]¶
Bases:
OptionData model for TCP authentication option.
- class pcapkit.protocols.transport.tcp.data.FastOpenCookie(kind, length, cookie)[source]¶
Bases:
OptionData model for TCP fast open cookie option.
- class pcapkit.protocols.transport.tcp.data.MPTCP(*args, **kwargs)[source]¶
Bases:
OptionData model for TCP MPTCP option.
- subtype: MPTCPOption¶
Subtype.
- class pcapkit.protocols.transport.tcp.data.MPTCPUnknown(kind, length, subtype, data)[source]¶
Bases:
MPTCPData model for TCP unknown MPTCP option.
- class pcapkit.protocols.transport.tcp.data.MPTCPCapable(kind, length, subtype, version, flags, skey, rkey, dl_len, checksum)[source]¶
Bases:
MPTCPData model for TCP
MP_CAPABLEoption.- flags: MPTCPCapableFlag¶
Flags.
- class pcapkit.protocols.transport.tcp.data.MPTCPCapableFlag(req, ext, deny_join, reserved, hsa)[source]¶
Bases:
DataData model for TCP MPTCP capable option flags.
- class pcapkit.protocols.transport.tcp.data.MPTCPJoin(*args, **kwargs)[source]¶
Bases:
MPTCPData model for TCP
MP_JOINoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPJoinSYN(kind, length, subtype, connection, reserved, backup, addr_id, token, nonce)[source]¶
Bases:
MPTCPJoinData model for TCP
MP_JOIN-SYNoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPJoinSYNACK(kind, length, subtype, connection, reserved, backup, addr_id, hmac, nonce)[source]¶
Bases:
MPTCPJoinData model for TCP
MP_JOIN-SYNACKoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPJoinACK(kind, length, subtype, connection, reserved, hmac)[source]¶
Bases:
MPTCPJoinData model for TCP
MP_JOIN-ACKoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPDSS(kind, length, subtype, reserved, data_fin, ack_wide, ack, dsn_wide, dsn, ssn, dl_len, checksum)[source]¶
Bases:
MPTCPData model for TCP
DSSoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPAddAddress(kind, length, subtype, version, reserved, echo, addr_id, addr, port, hmac)[source]¶
Bases:
MPTCPData model for TCP
ADD_ADDRoption.- addr: IPv4Address | IPv6Address¶
Address.
- class pcapkit.protocols.transport.tcp.data.MPTCPRemoveAddress(kind, length, subtype, reserved, addr_id)[source]¶
Bases:
MPTCPData model for TCP
REMOVE_ADDRoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPPriority(kind, length, subtype, reserved, backup, addr_id)[source]¶
Bases:
MPTCPData model for TCP
MP_PRIOoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPFallback(kind, length, subtype, reserved, dsn)[source]¶
Bases:
MPTCPData model for TCP
MP_FAILoption.
- class pcapkit.protocols.transport.tcp.data.MPTCPFastclose(kind, length, subtype, reserved, rkey)[source]¶
Bases:
MPTCPData model for TCP
MP_FASTCLOSEoption.
Footnotes