IP - Internet Protocol

pcapkit.protocols.internet.ip.protocol contains IP only, which is a base class for Internet Protocol (IP) protocol family [*], e.g. IPv4 and IPv6. Constructing the base gives the one its version keyword names; without it, octets give the one their Version field names, and fields are refused. Its from_data() reads the version of its data (#2574).

class pcapkit.protocols.internet.ip.protocol.IP[_PT: Data, _ST: Schema](file=None, length=None, **kwargs)[source]

Bases: Internet[_PT, _ST], Generic[_PT, _ST]

Base class for the IP protocol family.

The IPsec protocols (AH and ESP) derive from IPsec instead.

It dispatches on both paths, never giving an instance of this class (#2574). version names the member; without it, octets give the one their Version field names, and fields are refused, since no field picks a member. from_data() reads the version of its data. See __new__().

classmethod id()[source]

Index ID of the protocol.

Return type:

tuple[Literal['IPv4'], Literal['IPv6']]

Returns:

Index ID of the protocol.

classmethod from_data(data, **kwargs)[source]

Create protocol instance from data.

Parameters:
Return type:

Self

Returns:

Protocol instance; on this class, an instance of the member the version of data names, which both data models carry.

Raises:

ProtocolError – If that version is neither 4 nor 6, on this class.

__init__(file=None, length=None, *, version=None, **kwargs)[source]

Initialisation.

Parameters:
  • file (IO[bytes] | bytes | None) – Source packet stream.

  • length (int | None) – Length of packet data.

  • version (Literal[4, 6] | None) – Version of IP, 4 or 6: the member __new__() picks. Building from fields, it must be this class’s own. Parsing, it is handed on unread, as the enclosing IP layer passes its own version under this name to the layer it carries.

  • **kwargs (Any) – As Protocol.__init__.

Raises:

ProtocolError – If, building from fields, version names neither member, or is not this class’s own version: that of the member it is or derives from, which a subclass outside the members does not have.

static __new__(cls, file=None, length=None, **kwargs)[source]

Create the member a construction of this class describes.

The version keyword names the member, on either path. Without it, parsing octets gives the member the Version field in their first four bits names, and building from fields is refused, since no field picks a member. That member’s __init__ then runs with the same arguments. A subclass of this class is created as itself.

Parameters:
  • file (IO[bytes] | bytes | None) – Source packet stream, read here without being consumed.

  • length (int | None) – Length of packet data.

  • **kwargs (Any) – Arbitrary keyword arguments.

Return type:

IP

Returns:

An uninitialised instance of the member.

Raises:

ProtocolError – If version names neither member; or, without it, if building from fields, or if the octets are empty or name neither version.

static _member_of_version(version)[source]

The member a version of 4 or 6 names.

Parameters:

version (Any) – Version of IP.

Return type:

Type[IP]

Returns:

IPv4 or IPv6.

Raises:

ProtocolError – If version is neither, or is no int: a bool or a float is refused even where it equals one.

Footnotes