IPv4 - Internet Protocol version 4¶
pcapkit.protocols.internet.ipv4 contains
IPv4 only,
which implements extractor for Internet Protocol
version 4 (IPv4) [*], whose structure is described
as below:
Octets |
Bits |
Name |
Description |
|---|---|---|---|
0 |
0 |
|
Version ( |
0 |
4 |
|
Internal Header Length (IHL) |
1 |
8 |
|
Precedence |
1 |
11 |
|
Delay |
1 |
12 |
|
Throughput |
1 |
13 |
|
Reliability |
1 |
14 |
|
Explicit Congestion Notification (ECN) |
2 |
16 |
|
Total Length |
4 |
32 |
|
Identification |
6 |
48 |
Reserved Bit (must be |
|
6 |
49 |
|
Don’t Fragment (DF) |
6 |
50 |
|
More Fragments (MF) |
6 |
51 |
|
Fragment Offset |
8 |
64 |
|
Time To Live (TTL) |
9 |
72 |
|
Protocol (Transport Layer) |
10 |
80 |
|
Header Checksum |
12 |
96 |
|
Source IP Address |
16 |
128 |
|
Destination IP Address |
20 |
160 |
|
IP Options (if IHL > |
- class pcapkit.protocols.internet.ipv4.IPv4(file=None, length=None, **kwargs)[source]¶
-
This class implements Internet Protocol version 4.
This class currently supports parsing of the following IPv4 options, which are registered in the
self.__option__attribute:Option Code
Option Parser
Option Constructor
- property src: IPv4Address¶
Source IP address.
- property dst: IPv4Address¶
Destination IP address.
- classmethod register_option(code, meth)[source]¶
Register an option parser.
- Parameters:
code (
OptionNumber) – IPv4 option code.meth (
str|tuple[Callable[[Option,OrderedMultiDict[OptionNumber,Option]],Option],Callable[[OptionNumber,Option|None,Any],Option]]) – Method name or callable to parse and/or construct the option.
- read(length=None, *, __packet__=None, **kwargs)[source]¶
Read Internet Protocol version 4 (IPv4).
Structure of IPv4 header [RFC 791]:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- make(tos_pre=<ToSPrecedence.Routine: 0>, tos_pre_default=None, tos_pre_namespace=None, tos_pre_reversed=False, tos_del=<ToSDelay.NORMAL: 0>, tos_del_default=None, tos_del_namespace=None, tos_del_reversed=False, tos_thr=<ToSThroughput.NORMAL: 0>, tos_thr_default=None, tos_thr_namespace=None, tos_thr_reversed=False, tos_rel=<ToSReliability.NORMAL: 0>, tos_rel_default=None, tos_rel_namespace=None, tos_rel_reversed=False, tos_ecn=<ToSECN.Not_ECT: 0>, tos_ecn_default=None, tos_ecn_namespace=None, tos_ecn_reversed=False, id=0, df=False, mf=False, offset=0, ttl=0, protocol=<TransType.UDP: 17>, protocol_default=None, protocol_namespace=None, protocol_reversed=False, checksum=b'\\x00\\x00', src='127.0.0.1', dst='0.0.0.0', options=None, payload=b'', **kwargs)[source]¶
Make (construct) packet data.
- Parameters:
tos_pre (
ToSPrecedence|IntEnum|IntEnum|int|str) – Precedence of the packet.tos_pre_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace oftos_pre.tos_pre_reversed (
bool) – If the namespace oftos_preis reversed.tos_del (
ToSDelay|IntEnum|IntEnum|int|str) – Delay of the packet.tos_del_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace oftos_del.tos_del_reversed (
bool) – If the namespace oftos_delis reversed.tos_thr (
ToSThroughput|IntEnum|IntEnum|int|str) – Throughput of the packet.tos_thr_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace oftos_thr.tos_thr_reversed (
bool) – If the namespace oftos_thris reversed.tos_rel (
ToSReliability|IntEnum|IntEnum|int|str) – Reliability of the packet.tos_rel_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace oftos_rel.tos_rel_reversed (
bool) – If the namespace oftos_relis reversed.tos_ecn (
ToSECN|IntEnum|IntEnum|int|str) – ECN of the packet.tos_ecn_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace oftos_ecn.tos_ecn_reversed (
bool) – If the namespace oftos_ecnis reversed.id (
int) – Identification of the packet.df (
bool) – Don’t fragment flag.mf (
bool) – More fragments flag.offset (
int) – Fragment offset.protocol (
TransType|IntEnum|IntEnum|int|str) – Payload protocol of the packet.protocol_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – Namespace ofprotocol.protocol_reversed (
bool) – If the namespace ofprotocolis reversed.checksum (
bytes) – Checksum of the packet.src (
IPv4Address|str|int|bytes) – Source address of the packet.dst (
IPv4Address|str|int|bytes) – Destination address of the packet.options (
list[Option|tuple[OptionNumber,dict[str,Any]] |bytes] |OrderedMultiDict[OptionNumber,Option] |None) – Options of the packet.payload (
bytes|ProtocolBase|Schema) – Payload of the packet.**kwargs (
Any) – Arbitrary keyword arguments.
- Return type:
- Returns:
Constructed packet data.
- _read_ipv4_options(length)[source]¶
Read IPv4 option list.
- Parameters:
length (
int) – length of options- Return type:
- Returns:
Extracted IPv4 options.
- Raises:
ProtocolError – If the threshold is NOT matching.
- _read_opt_unassigned(schema, *, options)[source]¶
Read IPv4 unassigned options.
Structure of IPv4 unassigned options [RFC 791]:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | type | length | option data ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Parameters:
schema (
UnassignedOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis LESS THAN3.
- _read_opt_eool(schema, *, options)[source]¶
Read IPv4 End of Option List (
EOOL) option.Structure of IPv4 End of Option List (
EOOL) option [RFC 719]:+--------+ |00000000| +--------+ Type=0
- Parameters:
schema (
EOOLOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- _read_opt_nop(schema, *, options)[source]¶
Read IPv4 No Operation (
NOP) option.Structure of IPv4 No Operation (
NOP) option [RFC 719]:+--------+ |00000001| +--------+ Type=1
- Parameters:
schema (
NOPOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- _read_opt_sec(schema, *, options)[source]¶
Read IPv4 Security (
SEC) option.Structure of IPv4 Security (
SEC) option [RFC 1108]:+------------+------------+------------+-------------//----------+ | 10000010 | XXXXXXXX | SSSSSSSS | AAAAAAA[1] AAAAAAA0 | | | | | [0] | +------------+------------+------------+-------------//----------+ TYPE = 130 LENGTH CLASSIFICATION PROTECTION LEVEL AUTHORITY FLAGS- Parameters:
schema (
SECOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis LESS THAN3.
- _read_opt_lsr(schema, *, options)[source]¶
Read IPv4 Loose Source Route (
LSR) option.Structure of IPv4 Loose Source Route (
LSR) option [RFC 791]:+--------+--------+--------+---------//--------+ |10000011| length | pointer| route data | +--------+--------+--------+---------//--------+
- Parameters:
schema (
LSROption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If option is malformed.
- _read_opt_ts(schema, *, options)[source]¶
Read IPv4 Time Stamp (
TS) option.Structure of IPv4 Time Stamp (
TS) option [RFC 791]:+--------+--------+--------+--------+ |01000100| length | pointer|oflw|flg| +--------+--------+--------+--------+ | internet address | +--------+--------+--------+--------+ | timestamp | +--------+--------+--------+--------+ | . | . .- Parameters:
schema (
TSOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the option is malformed.
- _read_opt_e_sec(schema, *, options)[source]¶
Read IPv4 Extended Security (
E-SEC) option.Structure of IPv4 Extended Security (
E-SEC) option [RFC 1108]:+------------+------------+------------+-------//-------+ | 10000101 | 000LLLLL | AAAAAAAA | add sec info | +------------+------------+------------+-------//-------+ TYPE = 133 LENGTH ADDITIONAL ADDITIONAL SECURITY INFO SECURITY FORMAT CODE INFO- Parameters:
schema (
ESECOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis LESS THAN3.
- _read_opt_rr(schema, *, options)[source]¶
Read IPv4 Record Route (
RR) option.Structure of IPv4 Record Route (
RR) option [RFC 791]:+--------+--------+--------+---------//--------+ |00000111| length | pointer| route data | +--------+--------+--------+---------//--------+ Type=7
- Parameters:
schema (
RROption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If option is malformed.
- _read_opt_sid(schema, *, options)[source]¶
Read IPv4 Stream ID (
SID) option.Structure of IPv4 Stream ID (
SID) option [RFC 791][RFC 6814]:+--------+--------+--------+--------+ |10001000|00000010| Stream ID | +--------+--------+--------+--------+ Type=136 Length=4
- Parameters:
schema (
SIDOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis NOT4.
- _read_opt_ssr(schema, *, options)[source]¶
Read IPv4 Strict Source Route (
SSR) option.Structure of IPv4 Strict Source Route (
SSR) option [RFC 791]:+--------+--------+--------+---------//--------+ |10001001| length | pointer| route data | +--------+--------+--------+---------//--------+ Type=137
- Parameters:
schema (
SSROption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If option is malformed.
- _read_opt_mtup(schema, *, options)[source]¶
Read IPv4 MTU Probe (
MTUP) option.Structure of IPv4 MTU Probe (
MTUP) option [RFC 1063][RFC 1191]:+--------+--------+--------+--------+ |00001011|00000100| 2 octet value | +--------+--------+--------+--------+
- Parameters:
schema (
MTUPOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis NOT4.
- _read_opt_mtur(schema, *, options)[source]¶
Read IPv4 MTU Reply (
MTUR) option.Structure of IPv4 MTU Reply (
MTUR) option [RFC 1063][RFC 1191]:+--------+--------+--------+--------+ |00001100|00000100| 2 octet value | +--------+--------+--------+--------+
- Parameters:
schema (
MTUROption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis NOT4.
- _read_opt_tr(schema, *, options)[source]¶
Read IPv4 Traceroute (
TR) option.Structure of IPv4 Traceroute (
TR) option [RFC 1393][RFC 6814]:0 8 16 24 +-+-+-+-+-+-+-+-+---------------+---------------+---------------+ |F| C | Number | Length | ID Number | +-+-+-+-+-+-+-+-+---------------+---------------+---------------+ | Outbound Hop Count | Return Hop Count | +---------------+---------------+---------------+---------------+ | Originator IP Address | +---------------+---------------+---------------+---------------+
- Parameters:
schema (
TROption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis NOT12.
- _read_opt_rtralt(schema, *, options)[source]¶
Read IPv4 Router Alert (
RTRALT) option.Structure of IPv4 Router Alert (
RTRALT) option [RFC 2113]:+--------+--------+--------+--------+ |10010100|00000100| 2 octet value | +--------+--------+--------+--------+
- Parameters:
schema (
RTRALTOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If
lengthis NOT4.
- _read_opt_qs(schema, *, options)[source]¶
Read IPv4 Quick Start (
QS) option.Structure of IPv4 Quick Start (
QS) option [RFC 4782]:A Quick-Start Request
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option | Length=8 | Func. | Rate | QS TTL | | | | 0000 |Request| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QS Nonce | R | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Report of Approved Rate
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option | Length=8 | Func. | Rate | Not Used | | | | 1000 | Report| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QS Nonce | R | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Parameters:
schema (
QSOption) – parsed option schemaoptions (
OrderedMultiDict[OptionNumber,Option]) – extracted IPv4 options
- Return type:
- Returns:
Parsed option data.
- Raises:
ProtocolError – If the option is malformed.
- _make_opt_unassigned(kind, option=None, *, data, **kwargs)[source]¶
Make IPv4 unassigned options.
- Parameters:
kind (
OptionNumber) – option type codeoption (
UnassignedOption|None) – option datadata (
bytes) – option payload**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_eool(kind, option=None, **kwargs)[source]¶
Make IPv4 End of Option List (
EOOL) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
EOOLOption|None) – option data**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_nop(kind, option=None, **kwargs)[source]¶
Make IPv4 No Operation (
NOP) option.- Parameters:
kind (
OptionNumber) – option type code**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_sec(kind, option=None, *, level=<ClassificationLevel.Unclassified: 171>, level_default=None, level_namespace=None, level_reversed=False, authorities=None, **kwargs)[source]¶
Make IPv4 Security (
SEC) option.- Parameters:
kind (
OptionNumber) – option type codelevel (
ClassificationLevel|IntEnum|IntEnum|int|str) – classification levellevel_default (
int|None) – default value for classification levellevel_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – namespace for classification levellevel_reversed (
bool) – whether classification level is reversedauthorities (
list[ProtectionAuthority] |None) – list of protection authority flags**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- Raises:
ProtocolError – If
authoritiesnames a bit position that is not a protection authority – a negative one, or one that RFC 1108 reserves as a field termination indicator.
Notes
RFC 1108 section 2.2 lays each protection authority octet out as seven authority bits followed by a field termination indicator in bit 0:
0means another octet follows,1means this is the last. So the authority numbering skips every position that is a termination bit – 7, 15, 23 – which is what_read_opt_sec()encodes by looping overrange(7)per octet, and the reasonField_Termination_Indicatoris rejected here rather than written: the enumeration names it as structure, and a value written there would be dropped on the way back in. See #537.
- _make_opt_lsr(kind, option=None, *, counts=10, route=None, **kwargs)[source]¶
Make IPv4 Loose Source and Record Route (
LSR) option.- Parameters:
- Return type:
- Returns:
Constructured option schema.
- _make_opt_ts(kind, option=None, *, counts=5, overflow=0, timestamp=None, **kwargs)[source]¶
Make IPv4 Timestamp (
TS) option.- Parameters:
- Return type:
- Returns:
Constructured option schema.
- _make_opt_e_sec(kind, option=None, *, format=0, info=None, **kwargs)[source]¶
Make IPv4 Extended Security (
E-SEC) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
ESECOption|None) – option dataformat (
int) – additional security information format code**kwargs (
Any) – arbitrary keyword argumentsReturns – Constructured option schema.
- Return type:
- _make_opt_rr(kind, option=None, *, counts=10, route=None, **kwargs)[source]¶
Make IPv4 Record Route (
RR) option.- Parameters:
- Return type:
- Returns:
Constructured option schema.
- _make_opt_ssr(kind, option=None, *, counts=10, route=None, **kwargs)[source]¶
Make IPv4 Strict Source Route (
SSR) option.- Parameters:
- Return type:
- Returns:
Constructured option schema.
- _make_opt_mtup(kind, option=None, *, mtu=0, **kwargs)[source]¶
Make IPv4 MTU Probe (
MTUP) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
MTUPOption|None) – option datamtu (
int) – MTU value**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_mtur(kind, option=None, *, mtu=0, **kwargs)[source]¶
Make IPv4 MTU Reply (
MTUR) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
MTUROption|None) – option datamtu (
int) – MTU value**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_tr(kind, option=None, *, id=0, out=0, ret=0, origin='127.0.0.1', **kwargs)[source]¶
Make IPv4 Traceroute (
TR) option.- Parameters:
- Return type:
- Returns:
Constructured option schema.
- _make_opt_rtralt(kind, option=None, *, alert=<RouterAlert.Aggregated_Reservation_Nesting_Level_0: 1>, alert_default=None, alert_namespace=None, alert_reversed=False, **kwargs)[source]¶
Make IPv4 Router Alert (
RTRALT) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
RTRALTOption|None) – option dataalert (
RouterAlert|IntEnum|IntEnum|int|str) – router alert typealert_default (
int|None) – default value for router alert typealert_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – namespace for router alert typealert_reversed (
bool) – whether router alert type is reversed**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- _make_opt_qs(kind, option=None, *, func=<QSFunction.Quick_Start_Request: 0>, func_default=None, func_namespace=None, func_reversed=False, rate=0, ttl=0, nonce=0, **kwargs)[source]¶
Make IPv4 Quick-Start (
QS) option.- Parameters:
kind (
OptionNumber) – option type codeoption (
QuickStartRequestOption|QuickStartReportOption|None) – option datafunc (
QSFunction|IntEnum|IntEnum|str|int) – QS function typefunc_default (
int|None) – default value for QS function typefunc_namespace (
dict[str,int] |dict[int,str] |Type[IntEnum] |Type[IntEnum] |None) – namespace for QS function typefunc_reversed (
bool) – reversed flag for QS function typerate (
int) – rate (in kbps)nonce (
int) – nonce value**kwargs (
Any) – arbitrary keyword arguments
- Return type:
- Returns:
Constructured option schema.
- __option__: DefaultDict[OptionNumber | int, str | tuple[Callable[[Option, OrderedMultiDict[OptionNumber, Option]], Option], Callable[[OptionNumber, Option | None, Any], Option]]]¶
DefaultDict[Enum_OptionNumber, str | tuple[OptionParser, OptionConstructor]]: Option code to method mapping, c.f.
_read_ipv4_options()and/or_make_ipv4_options(). Method names are expected to be referred to the class by_read_opt_${name}and/or_make_opt_${name}, and if such name not found, the value should then be a method that can parse the option by itself.
Header Schemas¶
- class pcapkit.protocols.schema.internet.ipv4.IPv4(*args: _VT, **kwargs: _VT)[source]¶
Bases:
SchemaHeader schema for IPv4 packet.
- vihl: VerIHLField = <BitField vihl>¶
Version and header length.
- src: IPv4Address = <IPv4AddressField src>¶
Source address.
- dst: IPv4Address = <IPv4AddressField dst>¶
Destination address.
- class pcapkit.protocols.schema.internet.ipv4.Option(dict_=None, **kwargs)[source]¶
Bases:
EnumSchema[OptionNumber]Header schema for IPv4 options.
- type: OptionNumber = <EnumField type>¶
Option type.
- class pcapkit.protocols.schema.internet.ipv4.UnassignedOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 unassigned options.
- class pcapkit.protocols.schema.internet.ipv4.EOOLOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 end of option list (
EOOL) option.
- class pcapkit.protocols.schema.internet.ipv4.NOPOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 no operation (
NOP) option.
- class pcapkit.protocols.schema.internet.ipv4.SECOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 security (
SEC) option.- level: ClassificationLevel = <EnumField level>¶
Classification level.
- class pcapkit.protocols.schema.internet.ipv4.LSROption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 loose source route (
LSR) option.- route: list[IPv4Address] = <ListField route>¶
Route.
- class pcapkit.protocols.schema.internet.ipv4.TSOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 timestamp (
TS) option.- post_process(packet)[source]¶
Revise
schemadata after unpacking process.- Parameters:
- Return type:
- Returns:
Revised schema.
- Raises:
FieldValueError – If an entry of
ts_datathat the timestamp flag makes an address is abool, is not a valid IP address, or is not IPv4 – c.f.parse_ip_address().
Notes
This runs on the packing path as well as the unpacking one –
Schema.packcalls it once the buffer is filled – so thets_dataentries it converts below are whatever the caller passed to the constructor, not octets read off the wire. That is why those conversions go throughparse_ip_address()rather thanipaddress.ip_address(): this schema is reachable from publicIPv4.make, which accepts a caller-built option schema and packs it, andts_data’sUInt32Fielditem type takes aboolas theintit is a subclass of, so nothing downstream can question it. Measured before this fix:ts_data=[True, 5]packed as0000000100000005and reportedIPv4Address('0.0.0.1')with no exception and no warning. This was the fifth site of that defect – #481, #500, #539 and #540 are the first four – and the reason it is the fifth is that each of those fixed the sites it could see. See #552.
- class pcapkit.protocols.schema.internet.ipv4.ESECOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 extended security (
ESEC) option.
- class pcapkit.protocols.schema.internet.ipv4.RROption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 record route (
RR) option.- route: list[IPv4Address] = <ListField route>¶
Route.
- class pcapkit.protocols.schema.internet.ipv4.SIDOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 stream identifier (
SID) option.- sid: int = <UInt16Field sid>¶
Stream identifier. Two octets, per RFC 791 section 3.1, which gives the option as four octets in total: one of type, one of length, and a 16-bit stream identifier. This was a
UInt32Field, which over-read a well-formed option by two octets on the way in – thepacket length < 0: -2the library warned about – and re-emitted it two octets too wide on the way out, against thelength=4that_make_opt_sid()had always written. See #534.
- class pcapkit.protocols.schema.internet.ipv4.SSROption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 strict source route (
SSR) option.- route: list[IPv4Address] = <ListField route>¶
Route.
- class pcapkit.protocols.schema.internet.ipv4.MTUPOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 MTU probe (
MTUP) option.
- class pcapkit.protocols.schema.internet.ipv4.MTUROption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 MTU reply (
MTUR) option.
- class pcapkit.protocols.schema.internet.ipv4.TROption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 traceroute (
TR) option.- origin: IPv4Address = <IPv4AddressField origin>¶
Originator IP address.
- class pcapkit.protocols.schema.internet.ipv4.RTRALTOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
OptionHeader schema for IPv4 router alert (
RTRALT) option.- alert: RouterAlert = <EnumField alert>¶
Router alert value.
- class pcapkit.protocols.schema.internet.ipv4._QSOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
SchemaHeader schema for IPv4 quick start (
QS) options in generic representation.- flags: QSTestFlags = <ForwardMatchField flags>¶
Flags.
- data: QuickStartRequestOption | QuickStartReportOption = <SwitchField data>¶
QS data.
- class pcapkit.protocols.schema.internet.ipv4.QSOption(dict_=None, **kwargs)[source]¶
Bases:
Option,EnumSchema[QSFunction]Header schema for IPV4 quick start (
QS) options.- flags: QuickStartFlags = <BitField flags>¶
Flags.
- class pcapkit.protocols.schema.internet.ipv4.QuickStartRequestOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
QSOptionHeader schema for IPV4 quick start request options.
- class pcapkit.protocols.schema.internet.ipv4.QuickStartReportOption(*args: _VT, **kwargs: _VT)[source]¶
Bases:
QSOptionHeader schema for IPV4 quick start report of approved rate options.
- reserved: bytes = <PaddingField reserved>¶
Not used. One octet, holding the place a Quick-Start Request fills with
QS TTL: RFC 4782 Section 3.1 says in as many words that “for a Report of Approved Rate, the fourth byte of the Quick-Start Option is not used”, and that “bytes 5-8 contain a 30-bit QS Nonce and a 2-bit Reserved field” – so the nonce begins at the fifth octet for both functions, and figure 4 gives this option asLength=8like figure 3 gives its sibling. The field was missing, so the schema was seven octets wide against the eight_make_opt_qs()writes intolengthand the eight_read_opt_qs()demands of it, which meant a spec-correct Report of Approved Rate read off the wire decoded itsnonceone octet early – measured, with the selector length fixed and this field still absent:19088100deadbee0warnedpacket length < 0: -1and then died with a barestruct.error: bad char in struct format, the unconsumed octet having been read as another option. Declared as padding rather than as data because RFC 4782 gives it no meaning and no caller should be setting it. See #552.
Type Stubs¶
- class pcapkit.protocols.schema.internet.ipv4.VerIHLField[source]¶
Bases:
TypedDictVersion and header length field.
- class pcapkit.protocols.schema.internet.ipv4.ToSField¶
Bases:
TypedDictType of service field.
- class pcapkit.protocols.schema.internet.ipv4.Flags[source]¶
Bases:
TypedDictFlags and fragment offset field.
- class pcapkit.protocols.schema.internet.ipv4.TSFlags[source]¶
Bases:
TypedDictTimestamp flags field.
- class pcapkit.protocols.schema.internet.ipv4.QuickStartFlags[source]¶
Bases:
TypedDictQuick-Start flags.
Auxiliary Functions¶
- pcapkit.protocols.schema.internet.ipv4.quick_start_option_length(schema)[source]¶
On-the-wire length, in octets, of a resolved Quick-Start (
QS) suboption.The Quick-Start suboption schemas re-declare the option’s own
typeandlengthoctets – they inherit them fromOption– so whatquick_start_data_selector()has to hand the nestedSchemaFieldis the length of the whole option, not of the data after its header. Per RFC 4782 Section 3.1 – figure 3 for a Quick-Start Request and figure 4 for a Report of Approved Rate – that is eight octets for both functions, which differ in what the fourth octet holds rather than in how many there are: “The second byte contains the length field, indicating an option length of eight bytes”, and “For a Report of Approved Rate, the fourth byte of the Quick-Start Option is not used”. And_read_opt_qs()rejects any other value in thelengthfield outright.It is summed from the resolved schema’s own fields rather than written as that literal, for two reasons. The registry is open –
QSOptionis anEnumSchema, so a caller may register a further function code with a schema of its own width – and a number written here has to be kept in step by hand with every field the suboptions declare, which is precisely how #552 arose: the length was5, the width of a Quick-Start Request’sttlandnoncealone, with thetype,lengthandflagsoctets in front of them unaccounted for.- Parameters:
schema (
Type[QSOption]) – Quick-Start suboption schema, as resolved from thefuncsub-field byquick_start_data_selector().- Return type:
- Returns:
Length, in octets, that
schemaoccupies on the wire.- Raises:
FieldValueError – If
schemadeclares a field whose width is not fixed. Every field of a Quick-Start suboption is fixed-width, because the option is, and a variable-width one cannot be summed here without a packet to size it against – which is the one thing a selector does not have for the schema it is about to return. It fails rather than guessing, since guessing is the defect being fixed.
- pcapkit.protocols.schema.internet.ipv4.quick_start_data_selector(pkt)[source]¶
Selector function for
_QSOption.datafield.- Parameters:
- Return type:
- Returns:
If
funcis0, returns aSchemaFieldwrappedQuickStartRequestOptioninstance.If
funcis8, returns aSchemaFieldwrappedQuickStartReportOptioninstance.
Notes
The length handed to the
SchemaFieldcomes fromquick_start_option_length(), i.e. from the suboption that was just resolved. It used to be the literal5for both, which is not the width of either: a well-formed eight-octet Quick-Start Request1908002adeadbee0parsed withSchemaWarning: packet length < 0: -3and decoded itsnonceas 55 instead of 933982136, then left three octets to be read as a further, fabricated option – which made the enclosing datagram fail withProtocolError: IPv4: invalid format. That is silent corruption on the way to a misleading failure, and it was logged in review twice before #552 filed it.
Data Models¶
- class pcapkit.protocols.data.internet.ipv4.IPv4(*args: VT, **kwargs: VT)[source]¶
Bases:
ProtocolData model for IPv4 packet.
- src: IPv4Address¶
Source address.
- dst: IPv4Address¶
Destination address.
- class pcapkit.protocols.data.internet.ipv4.ToSField(*args: Any, **kwargs: Any)[source]¶
Bases:
DataData model for IPv4 ToS fields.
Important
Due to the preserved keyword conflict, please use
from_dict()to create an instance of this data model.- del: pcapkit.const.ipv4.tos_del.ToSDelay¶
Delay.
- pre: ToSPrecedence¶
Precedence.
- thr: ToSThroughput¶
Throughput.
- rel: ToSReliability¶
Reliability.
- class pcapkit.protocols.data.internet.ipv4.Flags(*args: VT, **kwargs: VT)[source]¶
Bases:
DataData model for IPv4 Flags.
- class pcapkit.protocols.data.internet.ipv4.Option(dict_=None, **kwargs)[source]¶
Bases:
DataData model for IPv4 options.
- code: OptionNumber¶
Option code.
- type: OptionType¶
Option type.
- class pcapkit.protocols.data.internet.ipv4.OptionType(*args: Any, **kwargs: Any)[source]¶
Bases:
DataData model for IPv4 option type data.
- class: pcapkit.const.ipv4.option_class.OptionClass¶
Option class.
- class pcapkit.protocols.data.internet.ipv4.UnassignedOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 unassigned option.
- class pcapkit.protocols.data.internet.ipv4.EOOLOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 End of Option List (
EOOL) option.
- class pcapkit.protocols.data.internet.ipv4.NOPOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 No Operation (
NOP) option.
- class pcapkit.protocols.data.internet.ipv4.SECOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Security (
SEC) option.- level: ClassificationLevel¶
Classification level.
- flags: tuple[ProtectionAuthority, ...]¶
Protection authority flags.
- class pcapkit.protocols.data.internet.ipv4.LSROption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Loose Source Route (
LSR) option.- route: tuple[IPv4Address, ...]¶
Route.
- class pcapkit.protocols.data.internet.ipv4.TSOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Time Stamp (
TS) option.- timestamp: tuple[timedelta | int, ...] | OrderedMultiDict[IPv4Address, timedelta | int]¶
Timestamp data.
- class pcapkit.protocols.data.internet.ipv4.ESECOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Extended Security (
ESEC) option.
- class pcapkit.protocols.data.internet.ipv4.RROption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Record Route (
RR) option.- route: tuple[IPv4Address, ...] | None¶
Route.
- class pcapkit.protocols.data.internet.ipv4.SIDOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Stream ID (
SID) option.
- class pcapkit.protocols.data.internet.ipv4.SSROption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Strict Source Route (
SSR) option.- route: tuple[IPv4Address, ...] | None¶
Route.
- class pcapkit.protocols.data.internet.ipv4.MTUPOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 MTU Probe (
MTUP) option.
- class pcapkit.protocols.data.internet.ipv4.MTUROption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 MTU Reply (
MTUR) option.
- class pcapkit.protocols.data.internet.ipv4.TROption(*args: Any, **kwargs: Any)[source]¶
Bases:
OptionData model for IPv4 Traceroute (
TR) option.Important
Due to the preserved keyword conflict, please use
from_dict()to create an instance of this data model.
- class pcapkit.protocols.data.internet.ipv4.RTRALTOption(*args: VT, **kwargs: VT)[source]¶
Bases:
OptionData model for IPv4 Router Alert (
RTRALT) option.- alert: RouterAlert¶
Router alert.
- class pcapkit.protocols.data.internet.ipv4.QSOption(dict_=None, **kwargs)[source]¶
Bases:
OptionData model for IPv4 Quick Start (
QS) option.- func: QSFunction¶
QS function.
Footnotes