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