scapy.contrib.mysql

MySQL client/server protocol.

This contrib module implements support for the MySQL classic protocol over TCP, including packet framing, common handshake/authentication messages, query packets, and common OK/ERR/EOF server responses.

Currently supported messages include:

  • Protocol::HandshakeV10

  • Protocol::SSLRequest

  • Protocol::HandshakeResponse41

  • OldAuthSwitchRequest

  • AuthSwitchRequest

  • AuthSwitchResponse

  • AuthMoreData

  • OK_Packet

  • ERR_Packet

  • EOF_Packet

  • COM_QUERY

  • COM_STMT_PREPARE_OK

Packet definitions for text resultset metadata and rows are available for explicit use, but automatic server-side stream inference for them is limited.

This module does not currently implement TLS-encrypted MySQL payloads, compression, binary resultsets, advanced server-side stream inference for resultset metadata/rows, or full command/authentication coverage.

class scapy.contrib.mysql.MySQLAuthMoreData(_pkt, /, *, header=1, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLAuthMoreData'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLAuthMoreData).header>, <StrField (MySQLAuthMoreData).data>]
class scapy.contrib.mysql.MySQLAuthSwitchRequest(_pkt, /, *, header=254, plugin_name=b'', plugin_data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLAuthSwitchRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLAuthSwitchRequest).header>, <StrNullField (MySQLAuthSwitchRequest).plugin_name>, <StrField (MySQLAuthSwitchRequest).plugin_data>]
class scapy.contrib.mysql.MySQLAuthSwitchResponse(_pkt, /, *, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLAuthSwitchResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrField (MySQLAuthSwitchResponse).data>]
class scapy.contrib.mysql.MySQLClient(_pkt, /, *, contents=[])[source]

Bases: _MySQLStream

aliastypes = [<class 'scapy.contrib.mysql.MySQLClient'>, <class 'scapy.contrib.mysql._MySQLStream'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketListField (MySQLClient).contents>]
class scapy.contrib.mysql.MySQLClientPacket(_pkt, /, *, payload_length=None, sequence_id=0)[source]

Bases: _MySQLPacket

aliastypes = [<class 'scapy.contrib.mysql.MySQLClientPacket'>, <class 'scapy.contrib.mysql._MySQLPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<LEThreeBytesField (_MySQLPacket,MySQLClientPacket,MySQLServerPacket).payload_length>, <ByteField (_MySQLPacket,MySQLClientPacket,MySQLServerPacket).sequence_id>]
guess_payload_class(payload: bytes) type[source]
class scapy.contrib.mysql.MySQLColumnDefinition41(_pkt, /, *, catalog=b'def', schema=b'', table=b'', org_table=b'', column_name=b'', org_column_name=b'', fixed_length_fields_len=12, character_set=0, column_length=0, column_type=253, flags=<Flag 0 ()>, decimals=0, filler=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLColumnDefinition41'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<MySQLLenEncStrField (MySQLColumnDefinition41).catalog>, <MySQLLenEncStrField (MySQLColumnDefinition41).schema>, <MySQLLenEncStrField (MySQLColumnDefinition41).table>, <MySQLLenEncStrField (MySQLColumnDefinition41).org_table>, <MySQLLenEncStrField (MySQLColumnDefinition41).column_name>, <MySQLLenEncStrField (MySQLColumnDefinition41).org_column_name>, <MySQLLenEncIntField (MySQLColumnDefinition41).fixed_length_fields_len>, <LEShortEnumField (MySQLColumnDefinition41).character_set>, <LEIntField (MySQLColumnDefinition41).column_length>, <ByteEnumField (MySQLColumnDefinition41).column_type>, <FlagsField (MySQLColumnDefinition41).flags>, <ByteField (MySQLColumnDefinition41).decimals>, <LEShortField (MySQLColumnDefinition41).filler>]
class scapy.contrib.mysql.MySQLComQuery(_pkt, /, *, cmd=3, query=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLComQuery'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (MySQLComQuery).cmd>, <StrField (MySQLComQuery).query>]
class scapy.contrib.mysql.MySQLCommand(_pkt, /, *, cmd=3, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLCommand'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (MySQLCommand).cmd>, <StrField (MySQLCommand).data>]
class scapy.contrib.mysql.MySQLEOFPacket(_pkt, /, *, header=254, warnings=0, status_flags=<Flag 0 ()>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLEOFPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLEOFPacket).header>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
class scapy.contrib.mysql.MySQLErrPacket(_pkt, /, *, header=255, error_code=0, sql_state_marker=b'#', sql_state=b'HY000', error_message=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLErrPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLErrPacket).header>, <LEShortField (MySQLErrPacket).error_code>, <StrFixedLenField (MySQLErrPacket).sql_state_marker>, <StrFixedLenField (MySQLErrPacket).sql_state>, <StrField (MySQLErrPacket).error_message>]
class scapy.contrib.mysql.MySQLHandshakeResponse41(_pkt, /, *, client_flags=<Flag 512 (PROTOCOL_41)>, max_packet_size=0, character_set=0, filler=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', username=b'', auth_response=None, database=b'', auth_plugin_name=b'', connect_attrs=b'', zstd_compression_level=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLHandshakeResponse41'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (MySQLHandshakeResponse41).client_flags>, <LEIntField (MySQLHandshakeResponse41).max_packet_size>, <ByteEnumField (MySQLHandshakeResponse41).character_set>, <StrFixedLenField (MySQLHandshakeResponse41).filler>, <StrNullField (MySQLHandshakeResponse41).username>, <scapy.fields.MultipleTypeField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
class scapy.contrib.mysql.MySQLHandshakeV10(_pkt, /, *, protocol_version=10, server_version=b'', connection_id=0, auth_plugin_data_part_1=b'', filler=0, capability_flags_lower=0, character_set=0, status_flags=<Flag 0 ()>, capability_flags_upper=0, auth_plugin_data_len=0, reserved=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', auth_plugin_data_part_2=b'', auth_plugin_name=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLHandshakeV10'>, <class 'scapy.packet.Packet'>]
property capability_flags: int
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLHandshakeV10).protocol_version>, <StrNullField (MySQLHandshakeV10).server_version>, <LEIntField (MySQLHandshakeV10).connection_id>, <StrFixedLenField (MySQLHandshakeV10).auth_plugin_data_part_1>, <ByteField (MySQLHandshakeV10).filler>, <LEShortField (MySQLHandshakeV10).capability_flags_lower>, <ByteEnumField (MySQLHandshakeV10).character_set>, <FlagsField (MySQLHandshakeV10).status_flags>, <LEShortField (MySQLHandshakeV10).capability_flags_upper>, <ByteField (MySQLHandshakeV10).auth_plugin_data_len>, <StrFixedLenField (MySQLHandshakeV10).reserved>, <StrLenField (MySQLHandshakeV10).auth_plugin_data_part_2>, <StrNullField (MySQLHandshakeV10).auth_plugin_name>]
class scapy.contrib.mysql.MySQLOKPacket(_pkt, /, *, header=0, affected_rows=0, last_insert_id=0, status_flags=<Flag 0 ()>, warnings=0, info=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLOKPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLOKPacket).header>, <MySQLLenEncIntField (MySQLOKPacket).affected_rows>, <MySQLLenEncIntField (MySQLOKPacket).last_insert_id>, <FlagsField (MySQLOKPacket).status_flags>, <LEShortField (MySQLOKPacket).warnings>, <StrField (MySQLOKPacket).info>]
class scapy.contrib.mysql.MySQLOldAuthSwitchRequest(_pkt, /, *, header=254)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLOldAuthSwitchRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLOldAuthSwitchRequest).header>]
class scapy.contrib.mysql.MySQLResultSetColumnCount(_pkt, /, *, column_count=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLResultSetColumnCount'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<MySQLLenEncIntField (MySQLResultSetColumnCount).column_count>]
class scapy.contrib.mysql.MySQLSSLRequest(_pkt, /, *, client_flags=<Flag 2560 (PROTOCOL_41+SSL)>, max_packet_size=0, character_set=0, filler=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLSSLRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (MySQLSSLRequest).client_flags>, <LEIntField (MySQLSSLRequest).max_packet_size>, <ByteEnumField (MySQLSSLRequest).character_set>, <StrFixedLenField (MySQLSSLRequest).filler>]
class scapy.contrib.mysql.MySQLServer(_pkt, /, *, contents=[])[source]

Bases: _MySQLStream

aliastypes = [<class 'scapy.contrib.mysql.MySQLServer'>, <class 'scapy.contrib.mysql._MySQLStream'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketListField (MySQLServer).contents>]
class scapy.contrib.mysql.MySQLServerPacket(_pkt, /, *, payload_length=None, sequence_id=0)[source]

Bases: _MySQLPacket

aliastypes = [<class 'scapy.contrib.mysql.MySQLServerPacket'>, <class 'scapy.contrib.mysql._MySQLPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<LEThreeBytesField (_MySQLPacket,MySQLClientPacket,MySQLServerPacket).payload_length>, <ByteField (_MySQLPacket,MySQLClientPacket,MySQLServerPacket).sequence_id>]
guess_payload_class(payload: bytes) type[source]
class scapy.contrib.mysql.MySQLStmtPrepareOK(_pkt, /, *, status=0, statement_id=0, num_columns=0, num_params=0, reserved_1=0, warning_count=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLStmtPrepareOK'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (MySQLStmtPrepareOK).status>, <LEIntField (MySQLStmtPrepareOK).statement_id>, <LEShortField (MySQLStmtPrepareOK).num_columns>, <LEShortField (MySQLStmtPrepareOK).num_params>, <ByteField (MySQLStmtPrepareOK).reserved_1>, <LEShortField (MySQLStmtPrepareOK).warning_count>]
class scapy.contrib.mysql.MySQLTextResultSetRow(_pkt, /, *, values=[])[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.mysql.MySQLTextResultSetRow'>, <class 'scapy.packet.Packet'>]
do_build() bytes[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<MySQLTextRowValuesField (MySQLTextResultSetRow).values>]