scapy.layers.quic

QUIC

The draft of a very basic implementation of the structures from [RFC 9000]. This isn’t binded to UDP by default as currently too incomplete.

TODO: - payloads. - encryption. - automaton. - etc.

class scapy.layers.quic.QUIC(_pkt, /)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
classmethod dispatch_hook(_pkt=None, *args, **kargs)[source]

Returns the right class for the given data.

match_subclass = True
mysummary()[source]
class scapy.layers.quic.QUIC_0RTT(_pkt, /, *, HeaderForm=1, FixedBit=1, LongPacketType=1, Reserved=0, PacketNumberLen=None, Version=1, DstConnIDLen=None, DstConnID=b'', SrcConnIDLen=None, SrcConnID=b'', Length=0, PacketNumber=None)[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_0RTT'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).HeaderForm>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).FixedBit>, <BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).LongPacketType>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).Reserved>, <QuicPacketNumberBitFieldLenField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).PacketNumberLen>, <IntField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).Version>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnID>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnID>, <QuicVarIntField (QUIC_0RTT,QUIC_Handshake).Length>, <scapy.fields.MultipleTypeField object>]
class scapy.layers.quic.QUIC_1RTT(_pkt, /, *, HeaderForm=0, FixedBit=1, SpinBit=0, Reserved=0, KeyPhase=0, PacketNumberLen=None, PacketNumber=None)[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_1RTT'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_1RTT).HeaderForm>, <BitField (QUIC_1RTT).FixedBit>, <BitField (QUIC_1RTT).SpinBit>, <BitField (QUIC_1RTT).Reserved>, <BitField (QUIC_1RTT).KeyPhase>, <QuicPacketNumberBitFieldLenField (QUIC_1RTT).PacketNumberLen>, <scapy.fields.MultipleTypeField object>]
class scapy.layers.quic.QUIC_ACK(_pkt, /, *, Type=2)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.quic.QUIC_ACK'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (QUIC_ACK).Type>]
class scapy.layers.quic.QUIC_Handshake(_pkt, /, *, HeaderForm=1, FixedBit=1, LongPacketType=2, Reserved=0, PacketNumberLen=None, Version=1, DstConnIDLen=None, DstConnID=b'', SrcConnIDLen=None, SrcConnID=b'', Length=0, PacketNumber=None)[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_Handshake'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).HeaderForm>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).FixedBit>, <BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).LongPacketType>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).Reserved>, <QuicPacketNumberBitFieldLenField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).PacketNumberLen>, <IntField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).Version>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnID>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnID>, <QuicVarIntField (QUIC_0RTT,QUIC_Handshake).Length>, <scapy.fields.MultipleTypeField object>]
class scapy.layers.quic.QUIC_Initial(_pkt, /, *, HeaderForm=1, FixedBit=1, LongPacketType=0, Reserved=0, PacketNumberLen=None, Version=1, DstConnIDLen=None, DstConnID=b'', SrcConnIDLen=None, SrcConnID=b'', TokenLen=None, Token=b'', Length=0, PacketNumber=None)[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_Initial'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).HeaderForm>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).FixedBit>, <BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).LongPacketType>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).Reserved>, <QuicPacketNumberBitFieldLenField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake).PacketNumberLen>, <IntField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).Version>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnID>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnID>, <QuicVarLenField (QUIC_Initial).TokenLen>, <StrLenField (QUIC_Initial).Token>, <QuicVarIntField (QUIC_Initial).Length>, <scapy.fields.MultipleTypeField object>]
class scapy.layers.quic.QUIC_PADDING(_pkt, /, *, Type=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.quic.QUIC_PADDING'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (QUIC_PADDING).Type>]
class scapy.layers.quic.QUIC_PING(_pkt, /, *, Type=1)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.quic.QUIC_PING'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (QUIC_PING).Type>]
class scapy.layers.quic.QUIC_Retry(_pkt, /, *, HeaderForm=1, FixedBit=1, LongPacketType=3, Unused=0, Version=1, DstConnIDLen=None, DstConnID=b'', SrcConnIDLen=None, SrcConnID=b'')[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_Retry'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).HeaderForm>, <BitField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).FixedBit>, <BitEnumField (QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).LongPacketType>, <BitField (QUIC_Retry).Unused>, <IntField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).Version>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnID>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnID>]
class scapy.layers.quic.QUIC_Version(_pkt, /, *, HeaderForm=1, Unused=0, Version=0, DstConnIDLen=None, DstConnID=b'', SrcConnIDLen=None, SrcConnID=b'', SupportedVersions=[])[source]

Bases: QUIC

aliastypes = [<class 'scapy.layers.quic.QUIC_Version'>, <class 'scapy.layers.quic.QUIC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (QUIC_Version).HeaderForm>, <BitField (QUIC_Version).Unused>, <IntField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).Version>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).DstConnID>, <FieldLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnIDLen>, <StrLenField (QUIC_Version,QUIC_Initial,QUIC_0RTT,QUIC_Handshake,QUIC_Retry).SrcConnID>, <FieldListField (QUIC_Version).SupportedVersions>]
class scapy.layers.quic.QuicPacketNumberBitFieldLenField(name: str, default: I | None, size: int, tot_size: int = 0, end_tot_size: int = 0)[source]

Bases: BitField

i2m(pkt, x)[source]
scapy.layers.quic.QuicPacketNumberField(name, default)[source]
class scapy.layers.quic.QuicVarEnumField(name: str, default: int | None, enum: Any)[source]

Bases: QuicVarIntField, _EnumField[int]

any2i(pkt: Packet | None, x: Any) int[source]
i2repr(pkt: Packet | None, x: int) Any[source]
i2s
i2s_cb
s2i
s2i_cb
class scapy.layers.quic.QuicVarIntField(name: str, default: Any, fmt: str = 'H')[source]

Bases: Field[int, int]

addfield(pkt: Packet, s: bytes, val: int | None)[source]
getfield(pkt: Packet, s: bytes) Tuple[bytes, int][source]
class scapy.layers.quic.QuicVarLenField(name: str, default: Optional[Any], length_of: Optional[str] = None, fmt: str = 'H', count_of: Optional[str] = None, adjust: Callable[[Packet, int], int] = <function FieldLenField.<lambda>>)[source]

Bases: FieldLenField, QuicVarIntField