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
- 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'>]
- 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'>]
- class scapy.layers.quic.QUIC_PING(_pkt, /, *, Type=1)[source]
Bases:
Packet- aliastypes = [<class 'scapy.layers.quic.QUIC_PING'>, <class 'scapy.packet.Packet'>]
- 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
- class scapy.layers.quic.QuicVarEnumField(name: str, default: int | None, enum: Any)[source]
Bases:
QuicVarIntField,_EnumField[int]- i2s
- i2s_cb
- s2i
- s2i_cb
- class scapy.layers.quic.QuicVarIntField(name: str, default: Any, fmt: str = 'H')[source]
Bases:
Field[int,int]
- 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