1% Regression tests for Scapy 2 3+Syntax check 4= Import the homeplugav layer 5 6from scapy.contrib.homeplugav import * 7#from scapy.all import 8 9# HomePlugAV 10 11############ 12############ 13+ Basic tests 14 15* Those test are here mainly to check nothing has been broken 16 17= Building packets packet 18~ basic HomePlugAV GetDeviceVersion StartMACRequest StartMACConfirmation ResetDeviceRequest ResetDeviceConfirmation NetworkInformationRequest ReadMACMemoryRequest ReadMACMemoryConfirmation ReadModuleDataRequest ReadModuleDataConfirmation WriteModuleDataRequest WriteModuleData2NVMRequest WriteModuleData2NVMConfirmation NetworkInfoConfirmationV10 NetworkInfoConfirmationV11 NetworkInfoV10 NetworkInfoV11 HostActionRequired LoopbackRequest LoopbackConfirmation SetEncryptionKeyRequest SetEncryptionKeyConfirmation ReadConfBlockRequest ReadConfBlockConfirmation QUAResetFactoryConfirm GetNVMParametersRequest GetNVMParametersConfirmation SnifferRequest SnifferConfirmation SnifferIndicate 19 20HomePlugAV() 21HomePlugAV()/GetDeviceVersion() 22HomePlugAV()/StartMACRequest() 23HomePlugAV()/StartMACConfirmation() 24HomePlugAV()/ResetDeviceRequest() 25HomePlugAV()/ResetDeviceConfirmation() 26HomePlugAV()/NetworkInformationRequest() 27HomePlugAV()/ReadMACMemoryRequest() 28HomePlugAV()/ReadMACMemoryConfirmation() 29HomePlugAV()/ReadModuleDataRequest() 30HomePlugAV()/ReadModuleDataConfirmation() 31HomePlugAV()/WriteModuleDataRequest() 32HomePlugAV()/WriteModuleData2NVMRequest() 33HomePlugAV()/WriteModuleData2NVMConfirmation() 34HomePlugAV()/NetworkInfoConfirmationV10() 35HomePlugAV()/NetworkInfoConfirmationV11() 36HomePlugAV()/NetworkInfoConfirmationV10()/NetworkInfoV10() 37HomePlugAV()/NetworkInfoConfirmationV11()/NetworkInfoV11() 38HomePlugAV()/HostActionRequired() 39HomePlugAV()/LoopbackRequest() 40HomePlugAV()/LoopbackConfirmation() 41HomePlugAV()/SetEncryptionKeyRequest() 42HomePlugAV()/SetEncryptionKeyConfirmation() 43HomePlugAV()/ReadConfBlockRequest() 44HomePlugAV()/ReadConfBlockConfirmation() 45HomePlugAV()/QUAResetFactoryConfirm() 46HomePlugAV()/GetNVMParametersRequest() 47HomePlugAV()/GetNVMParametersConfirmation() 48HomePlugAV()/SnifferRequest() 49HomePlugAV()/SnifferConfirmation() 50HomePlugAV()/SnifferIndicate() 51 52= Some important manipulations 53~ field 54pkt = HomePlugAV()/SetEncryptionKeyRequest() 55pkt.NMK = "A" * 16 56pkt.DAK = "B" * 16 57assert raw(pkt) == b'\x00P\xa0\x00\xb0R\x00AAAAAAAAAAAAAAAA\x00\xff\xff\xff\xff\xff\xffBBBBBBBBBBBBBBBB' 58 59pkt = HomePlugAV()/ReadMACMemoryRequest() 60pkt.Address = 0x31337 61pkt.Length = 0x666 62assert raw(pkt) == b'\x00\x08\xa0\x00\xb0R7\x13\x03\x00f\x06\x00\x00' 63 64pkt = HomePlugAV()/ReadModuleDataRequest() 65pkt.Length = 0x666 66pkt.Offset = 0x1337 67assert raw(pkt) == b'\x00$\xa0\x00\xb0R\x02\x00f\x067\x13\x00\x00' 68 69pkt = HomePlugAV()/SnifferRequest() 70pkt.SnifferControl = 0x1 71assert raw(pkt) == b"\x004\xa0\x00\xb0R\x01" 72 73= Some important fields parsing 74~ field 75_xstr = b"\x00%\xa0\x00\xb0R\x00\x00\x00\x00\x02\x00\x00\x04\x00\x00\x00\x00`\x8d\x05\xf9\x04\x01\x00\x00\x88)\x00\x00\x87`[\x14\x00$\xd4okm\x1f\xedHu\x85\x16>\x86\x1aKM\xd2\xe91\xfc6\x00\x00603506A112119017\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\x00z]\xa9\xe2]\xedR\x8b\x85\\\xdf\xe8~\xe9\xb2\x14637000A112139290\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\x00FREEPLUG_LC_6400_4-1_1.0\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\xbb\xcb\x0e\x10 \xad\x07\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\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\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\x01\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00`\xe5\x16\x00\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\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\x01\x01\x03\x02\x80\x84\x1e\x00\x80\x84\x1e\x00\xe0\x93\x04\x00\xe0\x93\x04\x00\x01\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\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\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\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\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 76 77pkt = HomePlugAV(_xstr) 78assert ReadModuleDataConfirmation in pkt 79assert pkt[ReadModuleDataConfirmation].ModuleID == 2 80assert pkt[ReadModuleDataConfirmation].checksum == 4177890656 81assert pkt[ReadModuleDataConfirmation].DataLen == 1024 82assert pkt[ReadModuleDataConfirmation].Offset == 0 83 84p = ModulePIB(pkt.ModuleData, pkt.Offset, pkt.DataLen) 85assert p.NMK == b"z]\xa9\xe2]\xedR\x8b\x85\\\xdf\xe8~\xe9\xb2\x14" 86assert p.DAK == b"\x1f\xedHu\x85\x16>\x86\x1aKM\xd2\xe91\xfc6" 87 88#= Discovery packet tests in local 89#~ netaccess HomePlugAV NetworkInfoConfirmationV10 NetworkInfoConfirmationV11 90#pkt = Ether()/HomePlugAV() 91#old_debug_dissector = conf.debug_dissector 92#conf.debug_dissector = False 93#a = srp1(pkt, iface="eth0") 94#conf.debug_dissector = old_debug_dissector 95#a 96#pkt.version = a.version 97#pkt /= NetworkInformationRequest() 98#old_debug_dissector = conf.debug_dissector 99#conf.debug_dissector = False 100#a = srp1(pkt, iface="eth0") 101#conf.debug_dissector = old_debug_dissector 102#NetworkInfoConfirmationV10 in a or NetworkInfoConfirmationV11 in a 103#_ == True 104 105#= Reading local 0x400st octets of Software Image in Module Data blocks 106#~ netaccess HomePlugAV ReadModuleDataRequest 107#pkt = Ether()/HomePlugAV()/ReadModuleDataRequest(ModuleID=0x1) 108#old_debug_dissector = conf.debug_dissector 109#conf.debug_dissector = False 110#a = srp1(pkt, iface="eth0") 111#conf.debug_dissector = old_debug_dissector 112#a 113#len(a.ModuleData) == pkt.Length 114#_ == True 115 116= Testing length and checksum on a generated Write Module Data Request 117string = b"goodchoucroute\x00\x00" 118pkt = WriteModuleDataRequest(ModuleData=string) 119pkt = WriteModuleDataRequest(pkt.build()) 120pkt.show() 121a = pkt.checksum == chksum32(pkt.ModuleData) 122b = pkt.DataLen == len(pkt.ModuleData) 123a, b 124assert a and b 125