% PCOM tests + Syntax check = Import the pcom layer from scapy.contrib.scada.pcom import * + Test PCOM/TCP = PCOM/TCP Default values raw(PCOMRequest())[2:] == b'\x65\x00\x00\x00' raw(PCOMResponse())[2:] == b'\x65\x00\x00\x00' = PCOM/TCP Len r = b'\x65\x00\x04\x00\x00\x00\x00\x00' raw(PCOMRequest() / b'\x00\x00\x00\x00')[2:] == r r = b'\x65\x00\x04\x00\x00\x00\x00\x00' raw(PCOMResponse() / b'\x00\x00\x00\x00')[2:] == r = PCOM/TCP Guess Payload Class assert isinstance(PCOMRequest(b'\x00\x00\x65\x00\x01\x00\x00\x00\x00\x00\x00\x00').payload, PCOMAsciiRequest) assert isinstance(PCOMResponse(b'\x00\x00\x65\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00').payload, PCOMAsciiResponse) assert isinstance(PCOMRequest(b'\x00\x00\x66\x00\x01\x00\x00\x00' + b'\x00' * 25).payload, PCOMBinaryRequest) assert isinstance(PCOMResponse(b'\x00\x00\x66\x00\x01\x00\x00\x00' + b'\x00' * 25).payload, PCOMBinaryResponse) + Test PCOM/Ascii = PCOM/ASCII Default values r = b'\x65\x00\x06\x00\x2f\x30\x30\x36\x30\x0d' raw(PCOMRequest() / PCOMAsciiRequest())[2:] == r r = b'\x65\x00\x07\x00\x2f\x41\x30\x30\x36\x30\x0d' raw(PCOMResponse() / PCOMAsciiResponse())[2:] == r = PCOM/ASCII Checksum r = b'\x65\x00\x08\x00\x2f\x30\x30\x49\x44\x45\x44\x0d' raw(PCOMRequest() / PCOMAsciiRequest(unitId='00',command='ID'))[2:] == r r = b'\x65\x00\x09\x00\x2f\x41\x30\x30\x49\x44\x45\x44\x0d' raw(PCOMResponse() / PCOMAsciiResponse(unitId='00',command='ID'))[2:] == r = PCOM/ASCII Known Codes f = PCOMAsciiCommandField('command', '', length_from= None) assert f.i2repr(None, 'CCS') == 'Send Stop Command \'CCS\'' assert f.i2repr(None, 'CC') == 'Reply of Admin Commands (CC*) \'CC\'' + Test PCOM/Binary = PCOM/Binary Default values r = b'\x66\x00\x1b\x00\x2f\x5f\x4f\x50\x4c\x43\x00\xfe\x01\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x45\xfd\x00\x00\x5c' raw(PCOMRequest(mode=0x66) / PCOMBinaryRequest())[2:] == r r = b'\x66\x00\x1b\x00\x2f\x5f\x4f\x50\x4c\x43\xfe\x00\x01\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x45\xfd\x00\x00\x5c' raw(PCOMResponse(mode=0x66) / PCOMBinaryResponse())[2:] == r = PCOM/Binary Checksum data = b'\x01\x00\x01\x01' r = b'\x66\x00\x1f\x00\x2f\x5f\x4f\x50\x4c\x43\x00\xfe\x01\x01\x00\x00\x4d\x00\ \x00\x00\x00\x00\x00\x01\x04\x00\xf2\xfc\x01\x00\x01\x01\xfd\xff\x5c' raw(PCOMRequest(mode=0x66) / PCOMBinaryRequest(command=0x4d,reserved3=0x01, commandSpecific='\x00\x00\x00\x00\x00\x01', len=4, data= data))[2:] == r r = b'\x66\x00\x1f\x00\x2f\x5f\x4f\x50\x4c\x43\xfe\x00\x01\x01\x00\x00\x4d\x00\ \x00\x00\x00\x00\x00\x01\x04\x00\xf2\xfc\x01\x00\x01\x01\xfd\xff\x5c' raw(PCOMResponse(mode=0x66) / PCOMBinaryResponse(command=0x4d,reserved3=0x01, commandSpecific='\x00\x00\x00\x00\x00\x01', len=4, data= data))[2:] == r = PCOM/Binary Known Codes f = PCOMBinaryCommandField('command', None) assert f.i2repr(None, 0x4d) == 'Read Operands Request - 0x4d'