1% knx layer test campaign 2 3+ Syntax check 4= Import the knx layer 5from scapy.contrib.knx import * 6 7+ Test KNX Header 8= Header default values 9pkt = KNX() 10assert raw(pkt) == b'\x06\x10\x00\x00\x00\x06' 11 12= KNX Header payload length calculation 13pkt = KNX(service_identifier=0x0203)/KNXDescriptionRequest() 14assert raw(pkt)[4:6] == b'\x00\x0e' 15 16= KNX Header Guess Payload KNXSearchRequest 17p = KNX(b'\x06\x10\x02\x01\x00\x0e\x08\x01\x00\x00\x00\x00\x00\x00') 18assert isinstance(p.payload, KNXSearchRequest) 19 20= KNX Header Guess Payload KNXSearchResponse 21p = KNX(b'\x06\x10\x02\x02\x00F\x08\x01\x00\x00\x00\x00\x00\x006\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02') 22assert isinstance(p.payload, KNXSearchResponse) 23 24= KNX Header Guess Payload KNXDescriptionRequest 25p = KNX(b'\x06\x10\x02\x03\x00\x0e\x08\x01\x00\x00\x00\x00\x00\x00') 26assert isinstance(p.payload, KNXDescriptionRequest) 27 28= KNX Header Guess Payload KNXDescriptionResponse 29p = KNX(b'\x06\x10\x02\x04\x00>6\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02') 30assert isinstance(p.payload, KNXDescriptionResponse) 31 32= KNX Header Guess Payload KNXConnectRequest 33p = KNX(b'\x06\x10\x02\x05\x00\x18\x08\x01\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x02\x03') 34assert isinstance(p.payload, KNXConnectRequest) 35 36= KNX Header Guess Payload KNXConnectResponse 37p = KNX(b'\x06\x10\x02\x06\x00\x12\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x02\x03') 38assert isinstance(p.payload, KNXConnectResponse) 39 40= KNX Header Guess Payload KNXConnectionstateRequest 41p = KNX(b'\x06\x10\x02\x07\x00\x10\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00') 42assert isinstance(p.payload, KNXConnectionstateRequest) 43 44= KNX Header Guess Payload KNXConnectionstateResponse 45p = KNX(b'\x06\x10\x02\x08\x00\x08\x00\x00') 46assert isinstance(p.payload, KNXConnectionstateResponse) 47 48= KNX Header Guess Payload KNXDisconnectRequest 49p = KNX(b'\x06\x10\x02\t\x00\x10\x01\x00\x08\x01\x00\x00\x00\x00\x00\x00') 50assert isinstance(p.payload, KNXDisconnectRequest) 51 52= KNX Header Guess Payload KNXDisconnectResponse 53p = KNX(b'\x06\x10\x02\n\x00\x08\x00\x00') 54assert isinstance(p.payload, KNXDisconnectResponse) 55 56= KNX Header Guess Payload KNXConfigurationRequest 57p = KNX(b'\x06\x10\x03\x10\x00\x15\x04\x01\x00\x00\x00\x00\xbc\xe0\x00\x00\n\x03\x01\x00\x80') 58assert isinstance(p.payload, KNXConfigurationRequest) 59 60= KNX Header Guess Payload KNXConfigurationACK 61p = KNX(b'\x06\x10\x03\x11\x00\n\x04\x01\x00\x00') 62assert isinstance(p.payload, KNXConfigurationACK) 63 64= KNX Header Guess Payload KNXTunnelingRequest 65p = KNX(b'\x06\x10\x04 \x00\x15\x04\x01\x00\x00\x00\x00\xbc\xe0\x00\x00\n\x03\x01\x00\x80') 66assert isinstance(p.payload, KNXTunnelingRequest) 67 68= KNX Header Guess Payload KNXTunnelingACK 69p = KNX(b'\x06\x10\x04!\x00\n\x04\x01\x00\x00') 70assert isinstance(p.payload, KNXTunnelingACK) 71 72+ Test layer binding 73= Destination port 74 75 76