scapy.contrib.isotp.isotp_packet

class scapy.contrib.isotp.isotp_packet.ISOTP(_pkt, /, *, data=b'')[source]

Bases: Packet

Packet class for ISOTP messages. This class contains additional slots for source address (tx_id), destination address (rx_id), extended source address (ext_address) and extended destination address (rx_ext_address) information. This information gets filled from ISOTPSockets or the ISOTPMessageBuilder, if it is available. Address information is not used for Packet comparison.

Parameters:
  • args – Arguments for Packet init, for example bytes string

  • kwargs – Keyword arguments for Packet init.

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP'>, <class 'scapy.packet.Packet'>]
comments: List[bytes] | None
default_fields: Dict[str, Any]
static defragment(can_frames: List[Packet], use_extended_addressing: bool | None = None) ISOTP | None[source]

Helper function to defragment a list of CAN frames to one ISOTP message

Parameters:
  • can_frames – A list of CAN frames

  • use_extended_addressing – Specify if extended ISO-TP addressing is used in the packets for defragmentation.

Returns:

An ISOTP message containing the data of the CAN frames or None

direction: int | None
explicit
ext_address: int | None
fields: Dict[str, Any]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrField (ISOTP).data>]
fieldtype: Dict[str, Field[Any, Any] | _FieldContainer]
fragment(*args: Any, **kargs: Any) List[Packet][source]

Helper function to fragment an ISOTP message into multiple CAN frames.

Parameters:

fd – type: Optional[bool]: will fragment the can frames with size CAN_FD_MAX_DLEN

Returns:

A list of CAN frames

name
original
overload_fields: Dict[Type[Packet], Dict[str, Any]]
overloaded_fields: Dict[str, Any]
packetfields: List[Field[Any, Any] | _FieldContainer]
parent
payload: Packet
post_transforms
process_information: Dict[str, Any] | None
raw_packet_cache: bytes | None
raw_packet_cache_fields: Dict[str, Any] | None
rx_ext_address: int | None
rx_id: int | None
sent_time: EDecimal | float | None
sniffed_on: NetworkInterface | str | None
stop_dissection_after
time: EDecimal | float
tx_id: int | None
underlayer
validate_fields() None[source]

Helper function to validate information in tx_id, rx_id, ext_address and rx_ext_address slots

wirelen: int | None
class scapy.contrib.isotp.isotp_packet.ISOTPHeader(_pkt, /, *, flags=<Flag 0 ()>, identifier=0, length=None, reserved=0)[source]

Bases: CAN

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTPHeader'>, <class 'scapy.layers.can.CAN'>, <class 'scapy.packet.Packet'>]
extract_padding(p: bytes) Tuple[bytes, bytes | None][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (ISOTPHeader).flags>, <XBitField (ISOTPHeader).identifier>, <ByteField (ISOTPHeader).length>, <ThreeBytesField (ISOTPHeader).reserved>]
guess_payload_class(payload: bytes) Type[Packet][source]

ISO-TP encodes the frame type in the first nibble of a frame. This is used to determine the payload_class

Parameters:

payload – payload bytes string

Returns:

Type of payload class

post_build(pkt: bytes, pay: bytes) bytes[source]

This will set the ByteField ‘length’ to the correct value.

class scapy.contrib.isotp.isotp_packet.ISOTPHeaderEA(_pkt, /, *, flags=<Flag 0 ()>, identifier=0, length=None, reserved=0, extended_address=0)[source]

Bases: ISOTPHeader

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTPHeaderEA'>, <class 'scapy.contrib.isotp.isotp_packet.ISOTPHeader'>, <class 'scapy.layers.can.CAN'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (ISOTPHeaderEA).flags>, <XBitField (ISOTPHeaderEA).identifier>, <ByteField (ISOTPHeaderEA).length>, <ThreeBytesField (ISOTPHeaderEA).reserved>, <XByteField (ISOTPHeaderEA).extended_address>]
post_build(pkt: bytes, pay: bytes) bytes[source]

This will set the ByteField ‘length’ to the correct value. ‘chb(len(pay) + 1)’ is required, because the field ‘extended_address’ is counted as payload on the CAN layer

class scapy.contrib.isotp.isotp_packet.ISOTPHeaderEA_FD(_pkt, /, *, flags=<Flag 0 ()>, identifier=0, length=None, fd_flags=<Flag 4 (fd_frame)>, reserved=0, extended_address=0)[source]

Bases: ISOTPHeaderEA

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTPHeaderEA_FD'>, <class 'scapy.contrib.isotp.isotp_packet.ISOTPHeaderEA'>, <class 'scapy.contrib.isotp.isotp_packet.ISOTPHeader'>, <class 'scapy.layers.can.CAN'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (ISOTPHeaderEA_FD).flags>, <XBitField (ISOTPHeaderEA_FD).identifier>, <ByteField (ISOTPHeaderEA_FD).length>, <FlagsField (ISOTPHeaderEA_FD).fd_flags>, <ShortField (ISOTPHeaderEA_FD).reserved>, <XByteField (ISOTPHeaderEA_FD).extended_address>]
post_build(pkt: bytes, pay: bytes) bytes[source]
class scapy.contrib.isotp.isotp_packet.ISOTPHeader_FD(_pkt, /, *, flags=<Flag 0 ()>, identifier=0, length=None, fd_flags=<Flag 4 (fd_frame)>, reserved=0)[source]

Bases: ISOTPHeader

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTPHeader_FD'>, <class 'scapy.contrib.isotp.isotp_packet.ISOTPHeader'>, <class 'scapy.layers.can.CAN'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FlagsField (ISOTPHeader_FD).flags>, <XBitField (ISOTPHeader_FD).identifier>, <ByteField (ISOTPHeader_FD).length>, <FlagsField (ISOTPHeader_FD).fd_flags>, <ShortField (ISOTPHeader_FD).reserved>]
post_build(pkt: bytes, pay: bytes) bytes[source]
class scapy.contrib.isotp.isotp_packet.ISOTP_CF(_pkt, /, *, type=2, index=0, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_CF'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_CF).type>, <BitField (ISOTP_CF).index>, <StrField (ISOTP_CF).data>]
class scapy.contrib.isotp.isotp_packet.ISOTP_FC(_pkt, /, *, type=3, fc_flag=0, block_size=0, separation_time=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_FC'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_FC).type>, <BitEnumField (ISOTP_FC).fc_flag>, <ByteField (ISOTP_FC).block_size>, <ByteField (ISOTP_FC).separation_time>]
class scapy.contrib.isotp.isotp_packet.ISOTP_FF(_pkt, /, *, type=1, message_size=0, extended_message_size=0, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_FF'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_FF).type>, <BitField (ISOTP_FF).message_size>, <scapy.fields.ConditionalField object>, <StrField (ISOTP_FF).data>]
class scapy.contrib.isotp.isotp_packet.ISOTP_FF_FD(_pkt, /, *, type=1, zero_field=0, message_size=0, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_FF_FD'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_FF_FD).type>, <BitField (ISOTP_FF_FD).zero_field>, <IntField (ISOTP_FF_FD).message_size>, <StrField (ISOTP_FF_FD).data>]
class scapy.contrib.isotp.isotp_packet.ISOTP_SF(_pkt, /, *, type=0, message_size=None, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_SF'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_SF).type>, <BitFieldLenField (ISOTP_SF).message_size>, <StrLenField (ISOTP_SF).data>]
class scapy.contrib.isotp.isotp_packet.ISOTP_SF_FD(_pkt, /, *, type=0, zero_field=0, message_size=None, data=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.isotp.isotp_packet.ISOTP_SF_FD'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (ISOTP_SF_FD).type>, <BitField (ISOTP_SF_FD).zero_field>, <FieldLenField (ISOTP_SF_FD).message_size>, <StrLenField (ISOTP_SF_FD).data>]