scapy.contrib.knx

KNXNet/IP

This module provides Scapy layers for KNXNet/IP communications over UDP according to KNX specifications v2.1 / ISO-IEC 14543-3. Specifications can be downloaded for free here : https://my.knx.org/en/shop/knx-specifications

Currently, the module (partially) supports the following services : * SEARCH REQUEST/RESPONSE * DESCRIPTION REQUEST/RESPONSE * CONNECT, DISCONNECT, CONNECTION_STATE REQUEST/RESPONSE * CONFIGURATION REQUEST/RESPONSE * TUNNELING REQUEST/RESPONSE

class scapy.contrib.knx.CEMI(_pkt, /, *, message_code=None, cemi_data=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.CEMI'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (CEMI).message_code>, <scapy.fields.MultipleTypeField object>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.CRD(_pkt, /, *, structure_length=0, connection_type=3, connection_data=<CRDTunnelingConnection  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.CRD'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (CRD).structure_length>, <ByteEnumField (CRD).connection_type>, <scapy.fields.ConditionalField object>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.CRDTunnelingConnection(_pkt, /, *, knx_individual_address=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.CRDTunnelingConnection'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<KNXAddressField (CRDTunnelingConnection).knx_individual_address>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.CRI(_pkt, /, *, structure_length=2, connection_type=3, connection_data=<TunnelingConnection  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.CRI'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (CRI).structure_length>, <ByteEnumField (CRI).connection_type>, <scapy.fields.ConditionalField object>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.DIBDeviceInfo(_pkt, /, *, structure_length=None, description_type=1, knx_medium=2, device_status=None, knx_address=None, project_installation_identifier=None, device_serial_number=None, device_multicast_address=None, device_mac_address=None, device_friendly_name=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.DIBDeviceInfo'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (DIBDeviceInfo).structure_length>, <ByteEnumField (DIBDeviceInfo).description_type>, <ByteEnumField (DIBDeviceInfo).knx_medium>, <ByteField (DIBDeviceInfo).device_status>, <KNXAddressField (DIBDeviceInfo).knx_address>, <ShortField (DIBDeviceInfo).project_installation_identifier>, <XBitField (DIBDeviceInfo).device_serial_number>, <IPField (DIBDeviceInfo).device_multicast_address>, <MACField (DIBDeviceInfo).device_mac_address>, <StrFixedLenField (DIBDeviceInfo).device_friendly_name>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.DIBSuppSvcFamilies(_pkt, /, *, structure_length=2, description_type=2, service_family=[<ServiceFamily  |>])[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.DIBSuppSvcFamilies'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (DIBSuppSvcFamilies).structure_length>, <ByteEnumField (DIBSuppSvcFamilies).description_type>, <scapy.fields.ConditionalField object>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.DPcEMI(_pkt, /, *, object_type=None, object_instance=1, property_id=None, number_of_elements=1, start_index=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.DPcEMI'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (DPcEMI).object_type>, <ByteField (DPcEMI).object_instance>, <ByteField (DPcEMI).property_id>, <BitField (DPcEMI).number_of_elements>, <BitField (DPcEMI).start_index>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.HPAI(_pkt, /, *, structure_length=None, host_protocol=1, ip_address=None, port=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.HPAI'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (HPAI).structure_length>, <ByteEnumField (HPAI).host_protocol>, <IPField (HPAI).ip_address>, <ShortField (HPAI).port>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.KNX(_pkt, /, *, header_length=None, protocol_version=16, service_identifier=None, total_length=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNX'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNX).header_length>, <XByteField (KNX).protocol_version>, <ShortEnumField (KNX).service_identifier>, <ShortField (KNX).total_length>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({'service_identifier': 513}, <class 'scapy.contrib.knx.KNXSearchRequest'>), ({'service_identifier': 514}, <class 'scapy.contrib.knx.KNXSearchResponse'>), ({'service_identifier': 515}, <class 'scapy.contrib.knx.KNXDescriptionRequest'>), ({'service_identifier': 516}, <class 'scapy.contrib.knx.KNXDescriptionResponse'>), ({'service_identifier': 517}, <class 'scapy.contrib.knx.KNXConnectRequest'>), ({'service_identifier': 518}, <class 'scapy.contrib.knx.KNXConnectResponse'>), ({'service_identifier': 519}, <class 'scapy.contrib.knx.KNXConnectionstateRequest'>), ({'service_identifier': 520}, <class 'scapy.contrib.knx.KNXConnectionstateResponse'>), ({'service_identifier': 522}, <class 'scapy.contrib.knx.KNXDisconnectResponse'>), ({'service_identifier': 521}, <class 'scapy.contrib.knx.KNXDisconnectRequest'>), ({'service_identifier': 784}, <class 'scapy.contrib.knx.KNXConfigurationRequest'>), ({'service_identifier': 785}, <class 'scapy.contrib.knx.KNXConfigurationACK'>), ({'service_identifier': 1056}, <class 'scapy.contrib.knx.KNXTunnelingRequest'>), ({'service_identifier': 1057}, <class 'scapy.contrib.knx.KNXTunnelingACK'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.KNXAddressField(name: str, default: int | None)[source]

Bases: ShortField

any2i(pkt, x)[source]
i2repr(pkt, x)[source]
class scapy.contrib.knx.KNXConfigurationACK(_pkt, /, *, structure_length=None, communication_channel_id=1, sequence_counter=None, status=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConfigurationACK'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXConfigurationACK).structure_length>, <ByteField (KNXConfigurationACK).communication_channel_id>, <ByteField (KNXConfigurationACK).sequence_counter>, <ByteField (KNXConfigurationACK).status>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.KNXConfigurationRequest(_pkt, /, *, structure_length=4, communication_channel_id=1, sequence_counter=None, reserved=None, cemi=<CEMI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConfigurationRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXConfigurationRequest).structure_length>, <ByteField (KNXConfigurationRequest).communication_channel_id>, <ByteField (KNXConfigurationRequest).sequence_counter>, <ByteField (KNXConfigurationRequest).reserved>, <PacketField (KNXConfigurationRequest).cemi>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.KNXConnectRequest(_pkt, /, *, control_endpoint=<HPAI  |>, data_endpoint=<HPAI  |>, connection_request_information=<CRI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConnectRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketField (KNXConnectRequest).control_endpoint>, <PacketField (KNXConnectRequest).data_endpoint>, <PacketField (KNXConnectRequest).connection_request_information>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXConnectResponse(_pkt, /, *, communication_channel_id=None, status=None, data_endpoint=<HPAI  |>, connection_response_data_block=<CRD  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConnectResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXConnectResponse).communication_channel_id>, <ByteField (KNXConnectResponse).status>, <PacketField (KNXConnectResponse).data_endpoint>, <PacketField (KNXConnectResponse).connection_response_data_block>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXConnectionstateRequest(_pkt, /, *, communication_channel_id=None, reserved=None, control_endpoint=<HPAI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConnectionstateRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXConnectionstateRequest).communication_channel_id>, <ByteField (KNXConnectionstateRequest).reserved>, <PacketField (KNXConnectionstateRequest).control_endpoint>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXConnectionstateResponse(_pkt, /, *, communication_channel_id=None, status=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXConnectionstateResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXConnectionstateResponse).communication_channel_id>, <ByteField (KNXConnectionstateResponse).status>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXDescriptionRequest(_pkt, /, *, control_endpoint=<HPAI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXDescriptionRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketField (KNXDescriptionRequest).control_endpoint>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXDescriptionResponse(_pkt, /, *, device_info=<DIBDeviceInfo  |>, supported_service_families=<DIBSuppSvcFamilies  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXDescriptionResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketField (KNXDescriptionResponse).device_info>, <PacketField (KNXDescriptionResponse).supported_service_families>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXDisconnectRequest(_pkt, /, *, communication_channel_id=1, reserved=None, control_endpoint=<HPAI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXDisconnectRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXDisconnectRequest).communication_channel_id>, <ByteField (KNXDisconnectRequest).reserved>, <PacketField (KNXDisconnectRequest).control_endpoint>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXDisconnectResponse(_pkt, /, *, communication_channel_id=None, status=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXDisconnectResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXDisconnectResponse).communication_channel_id>, <ByteField (KNXDisconnectResponse).status>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXGroupField(name: str, default: int | None)[source]

Bases: ShortField

any2i(pkt, x)[source]
i2repr(pkt, x)[source]
class scapy.contrib.knx.KNXSearchRequest(_pkt, /, *, discovery_endpoint=<HPAI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXSearchRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketField (KNXSearchRequest).discovery_endpoint>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXSearchResponse(_pkt, /, *, control_endpoint=<HPAI  |>, device_info=<DIBDeviceInfo  |>, supported_service_families=<DIBSuppSvcFamilies  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXSearchResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketField (KNXSearchResponse).control_endpoint>, <PacketField (KNXSearchResponse).device_info>, <PacketField (KNXSearchResponse).supported_service_families>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.KNXTunnelingACK(_pkt, /, *, structure_length=None, communication_channel_id=1, sequence_counter=None, status=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXTunnelingACK'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXTunnelingACK).structure_length>, <ByteField (KNXTunnelingACK).communication_channel_id>, <ByteField (KNXTunnelingACK).sequence_counter>, <ByteField (KNXTunnelingACK).status>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.KNXTunnelingRequest(_pkt, /, *, structure_length=4, communication_channel_id=1, sequence_counter=None, reserved=None, cemi=<CEMI  |>)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.KNXTunnelingRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (KNXTunnelingRequest).structure_length>, <ByteField (KNXTunnelingRequest).communication_channel_id>, <ByteField (KNXTunnelingRequest).sequence_counter>, <ByteField (KNXTunnelingRequest).reserved>, <PacketField (KNXTunnelingRequest).cemi>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
post_build(p, pay)[source]
class scapy.contrib.knx.LcEMI(_pkt, /, *, additional_information_length=0, additional_information=None, frame_type=1, reserved_1=0, repeat_on_error=1, broadcast_type=1, priority=3, ack_request=0, confirmation_error=0, address_type=1, hop_count=6, extended_frame_format=0, source_address=None, destination_address=2563, npdu_length=1, packet_type=0, sequence_type=0, reserved_2=0, acpi=2, data=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.LcEMI'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (LcEMI).additional_information_length>, <StrLenField (LcEMI).additional_information>, <BitEnumField (LcEMI).frame_type>, <BitField (LcEMI).reserved_1>, <BitField (LcEMI).repeat_on_error>, <BitEnumField (LcEMI).broadcast_type>, <BitEnumField (LcEMI).priority>, <BitField (LcEMI).ack_request>, <BitField (LcEMI).confirmation_error>, <BitEnumField (LcEMI).address_type>, <BitField (LcEMI).hop_count>, <BitField (LcEMI).extended_frame_format>, <KNXAddressField (LcEMI).source_address>, <KNXGroupField (LcEMI).destination_address>, <FieldLenField (LcEMI).npdu_length>, <BitEnumField (LcEMI).packet_type>, <BitEnumField (LcEMI).sequence_type>, <BitField (LcEMI).reserved_2>, <BitEnumField (LcEMI).acpi>, <BitField (LcEMI).data>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.ServiceFamily(_pkt, /, *, id=None, version=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.ServiceFamily'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (ServiceFamily).id>, <ByteField (ServiceFamily).version>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]
class scapy.contrib.knx.TunnelingConnection(_pkt, /, *, knx_layer=2, reserved=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.knx.TunnelingConnection'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (TunnelingConnection).knx_layer>, <ByteField (TunnelingConnection).reserved>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.packet.Padding'>)]