Example #1
0
class UDS_RD(Packet):
    dataFormatIdentifiers = ObservableDict({
        0: 'noCompressionNoEncryption'
    })
    name = 'RequestDownload'
    fields_desc = [
        ByteEnumField('dataFormatIdentifier', 0, dataFormatIdentifiers),
        BitField('memorySizeLen', 0, 4),
        BitField('memoryAddressLen', 0, 4),
        ConditionalField(XByteField('memoryAddress1', 0),
                         lambda pkt: pkt.memoryAddressLen == 1),
        ConditionalField(XShortField('memoryAddress2', 0),
                         lambda pkt: pkt.memoryAddressLen == 2),
        ConditionalField(X3BytesField('memoryAddress3', 0),
                         lambda pkt: pkt.memoryAddressLen == 3),
        ConditionalField(XIntField('memoryAddress4', 0),
                         lambda pkt: pkt.memoryAddressLen == 4),
        ConditionalField(XByteField('memorySize1', 0),
                         lambda pkt: pkt.memorySizeLen == 1),
        ConditionalField(XShortField('memorySize2', 0),
                         lambda pkt: pkt.memorySizeLen == 2),
        ConditionalField(X3BytesField('memorySize3', 0),
                         lambda pkt: pkt.memorySizeLen == 3),
        ConditionalField(XIntField('memorySize4', 0),
                         lambda pkt: pkt.memorySizeLen == 4)
    ]
Example #2
0
File: uds.py Project: xambroz/scapy
class UDS_RD(Packet):
    dataFormatIdentifiers = ObservableDict({0: 'noCompressionNoEncryption'})
    name = 'RequestDownload'
    fields_desc = [
        ByteEnumField('dataFormatIdentifier', 0, dataFormatIdentifiers),
        BitField('memorySizeLen', 0, 4),
        BitField('memoryAddressLen', 0, 4),
        ConditionalField(XByteField('memoryAddress1', 0),
                         lambda pkt: pkt.memoryAddressLen == 1),
        ConditionalField(XShortField('memoryAddress2', 0),
                         lambda pkt: pkt.memoryAddressLen == 2),
        ConditionalField(X3BytesField('memoryAddress3', 0),
                         lambda pkt: pkt.memoryAddressLen == 3),
        ConditionalField(XIntField('memoryAddress4', 0),
                         lambda pkt: pkt.memoryAddressLen == 4),
        ConditionalField(XByteField('memorySize1', 0),
                         lambda pkt: pkt.memorySizeLen == 1),
        ConditionalField(XShortField('memorySize2', 0),
                         lambda pkt: pkt.memorySizeLen == 2),
        ConditionalField(X3BytesField('memorySize3', 0),
                         lambda pkt: pkt.memorySizeLen == 3),
        ConditionalField(XIntField('memorySize4', 0),
                         lambda pkt: pkt.memorySizeLen == 4)
    ]

    @staticmethod
    def get_log(pkt):
        addr = getattr(pkt, "memoryAddress%d" % pkt.memoryAddressLen)
        size = getattr(pkt, "memorySize%d" % pkt.memorySizeLen)
        return pkt.sprintf("%UDS.service%"), (addr, size)
Example #3
0
class UDS_RDBI(Packet):
    dataIdentifiers = ObservableDict()
    name = 'ReadDataByIdentifier'
    fields_desc = [
        FieldListField("identifiers", [],
                       XShortEnumField('dataIdentifier', 0, dataIdentifiers))
    ]
Example #4
0
class UDS_IOCBI(Packet):
    name = 'InputOutputControlByIdentifier'
    dataIdentifiers = ObservableDict()
    fields_desc = [
        XShortEnumField('dataIdentifier', 0, dataIdentifiers),
        ByteField('controlOptionRecord', 0),
        StrField('controlEnableMaskRecord', b"", fmt="B")
    ]
Example #5
0
class KWP_SDS(Packet):
    diagnosticSessionTypes = ObservableDict({
        0x81: 'defaultSession',
        0x85: 'programmingSession',
        0x89: 'standBySession',
        0x90: 'EcuPassiveSession',
        0x92: 'extendedDiagnosticSession'
    })
    name = 'StartDiagnosticSession'
    fields_desc = [
        ByteEnumField('diagnosticSession', 0, diagnosticSessionTypes)
    ]
Example #6
0
class UDS_DSC(Packet):
    diagnosticSessionTypes = ObservableDict({
        0x00: 'ISOSAEReserved',
        0x01: 'defaultSession',
        0x02: 'programmingSession',
        0x03: 'extendedDiagnosticSession',
        0x04: 'safetySystemDiagnosticSession',
        0x7F: 'ISOSAEReserved'})
    name = 'DiagnosticSessionControl'
    fields_desc = [
        ByteEnumField('diagnosticSessionType', 0, diagnosticSessionTypes)
    ]
Example #7
0
class GMLAN_RDBPI(Packet):
    dataIdentifiers = ObservableDict({
        0x0005: "OBD_EngineCoolantTemperature",
        0x000C: "OBD_EngineRPM",
        0x001f: "OBD_TimeSinceEngineStart"
    })
    name = 'ReadDataByParameterIdentifier'
    fields_desc = [
        FieldListField("identifiers", [],
                       XShortEnumField('parameterIdentifier', 0,
                                       dataIdentifiers))
    ]
Example #8
0
File: uds.py Project: xambroz/scapy
class UDS_RDBI(Packet):
    dataIdentifiers = ObservableDict()
    name = 'ReadDataByIdentifier'
    fields_desc = [
        FieldListField("identifiers", [0],
                       XShortEnumField('dataIdentifier', 0, dataIdentifiers))
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%UDS.service%"), \
            pkt.sprintf("%UDS_RDBI.identifiers%")
Example #9
0
File: uds.py Project: xambroz/scapy
class UDS_IOCBI(Packet):
    name = 'InputOutputControlByIdentifier'
    dataIdentifiers = ObservableDict()
    fields_desc = [
        XShortEnumField('dataIdentifier', 0, dataIdentifiers),
        ByteField('controlOptionRecord', 0),
        StrField('controlEnableMaskRecord', 0, fmt="B")
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%UDS.service%"), pkt.dataIdentifier
Example #10
0
class UDS_RC(Packet):
    routineControlTypes = {
        0: 'ISOSAEReserved',
        1: 'startRoutine',
        2: 'stopRoutine',
        3: 'requestRoutineResults'
    }
    routineControlIdentifiers = ObservableDict()
    name = 'RoutineControl'
    fields_desc = [
        ByteEnumField('routineControlType', 0, routineControlTypes),
        XShortEnumField('routineIdentifier', 0, routineControlIdentifiers)
    ]
Example #11
0
class GMLAN_RDBPI(Packet):
    dataIdentifiers = ObservableDict({
        0x0005: "OBD_EngineCoolantTemperature",
        0x000C: "OBD_EngineRPM",
        0x001f: "OBD_TimeSinceEngineStart"
    })
    name = 'ReadDataByParameterIdentifier'
    fields_desc = [
        FieldListField(
            "identifiers", [],
            XShortEnumField('parameterIdentifier', 0, dataIdentifiers))
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%GMLAN.service%"), \
            pkt.sprintf("%GMLAN_RDBPI.identifiers%")
Example #12
0
class KWP_SRBLI(Packet):
    routineLocalIdentifiers = ObservableDict({
        0xE0: "FlashEraseRoutine",
        0xE1: "FlashCheckRoutine",
        0xE2: "Tell-TaleRetentionStack",
        0xE3: "RequestDTCsFromShadowErrorMemory",
        0xE4: "RequestEnvironmentDataFromShadowErrorMemory",
        0xE5: "RequestEventInformation",
        0xE6: "RequestEventEnvironmentData",
        0xE7: "RequestSoftwareModuleInformation",
        0xE8: "ClearTell-TaleRetentionStack",
        0xE9: "ClearEventInformation"
    })
    name = 'StartRoutineByLocalIdentifier'
    fields_desc = [
        XByteEnumField('routineLocalIdentifier', 0, routineLocalIdentifiers)
    ]
Example #13
0
File: uds.py Project: yyasuda/scapy
class UDS_DSC(Packet):
    diagnosticSessionTypes = ObservableDict({
        0x00: 'ISOSAEReserved',
        0x01: 'defaultSession',
        0x02: 'programmingSession',
        0x03: 'extendedDiagnosticSession',
        0x04: 'safetySystemDiagnosticSession',
        0x7F: 'ISOSAEReserved'})
    name = 'DiagnosticSessionControl'
    fields_desc = [
        ByteEnumField('diagnosticSessionType', 0, diagnosticSessionTypes)
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%UDS.service%"), \
            pkt.sprintf("%UDS_DSC.diagnosticSessionType%")
Example #14
0
class KWP_RECUI(Packet):
    name = 'ReadECUIdentification'
    localIdentifiers = ObservableDict({
        0x86: "DCS ECU Identification",
        0x87: "DCX / MMC ECU Identification",
        0x88: "VIN (Original)",
        0x89: "Diagnostic Variant Code",
        0x90: "VIN (Current)",
        0x96: "Calibration Identification",
        0x97: "Calibration Verification Number",
        0x9A: "ECU Code Fingerprint",
        0x98: "ECU Data Fingerprint",
        0x9C: "ECU Code Software Identification",
        0x9D: "ECU Data Software Identification",
        0x9E: "ECU Boot Software Identification",
        0x9F: "ECU Boot Fingerprint"
    })
    fields_desc = [XByteEnumField('localIdentifier', 0, localIdentifiers)]
Example #15
0
class KWP_RDBLI(Packet):
    localIdentifiers = ObservableDict({
        0xE0: "Development Data",
        0xE1: "ECU Serial Number",
        0xE2: "DBCom Data",
        0xE3: "Operating System Version",
        0xE4: "Ecu Reprogramming Identification",
        0xE5: "Vehicle Information",
        0xE6: "Flash Info 1",
        0xE7: "Flash Info 2",
        0xE8: "System Diagnostic general parameter data",
        0xE9: "System Diagnostic global parameter data",
        0xEA: "Ecu Configuration",
        0xEB: "Diagnostic Protocol Information"
    })
    name = 'ReadDataByLocalIdentifier'
    fields_desc = [
        XByteEnumField('recordLocalIdentifier', 0, localIdentifiers)
    ]
Example #16
0
File: uds.py Project: xambroz/scapy
class UDS_RC(Packet):
    routineControlTypes = {
        0: 'ISOSAEReserved',
        1: 'startRoutine',
        2: 'stopRoutine',
        3: 'requestRoutineResults'
    }
    routineControlIdentifiers = ObservableDict()
    name = 'RoutineControl'
    fields_desc = [
        ByteEnumField('routineControlType', 0, routineControlTypes),
        XShortEnumField('routineIdentifier', 0, routineControlIdentifiers),
        StrField('routineControlOptionRecord', 0, fmt="B"),
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%UDS.service%"),\
            (pkt.routineControlType,
             pkt.routineIdentifier,
             pkt.routineControlOptionRecord)
Example #17
0
File: uds.py Project: xambroz/scapy
class UDS(ISOTP):
    services = ObservableDict({
        0x10: 'DiagnosticSessionControl',
        0x11: 'ECUReset',
        0x14: 'ClearDiagnosticInformation',
        0x19: 'ReadDTCInformation',
        0x22: 'ReadDataByIdentifier',
        0x23: 'ReadMemoryByAddress',
        0x24: 'ReadScalingDataByIdentifier',
        0x27: 'SecurityAccess',
        0x28: 'CommunicationControl',
        0x2A: 'ReadDataPeriodicIdentifier',
        0x2C: 'DynamicallyDefineDataIdentifier',
        0x2E: 'WriteDataByIdentifier',
        0x2F: 'InputOutputControlByIdentifier',
        0x31: 'RoutineControl',
        0x34: 'RequestDownload',
        0x35: 'RequestUpload',
        0x36: 'TransferData',
        0x37: 'RequestTransferExit',
        0x3D: 'WriteMemoryByAddress',
        0x3E: 'TesterPresent',
        0x50: 'DiagnosticSessionControlPositiveResponse',
        0x51: 'ECUResetPositiveResponse',
        0x54: 'ClearDiagnosticInformationPositiveResponse',
        0x59: 'ReadDTCInformationPositiveResponse',
        0x62: 'ReadDataByIdentifierPositiveResponse',
        0x63: 'ReadMemoryByAddressPositiveResponse',
        0x64: 'ReadScalingDataByIdentifierPositiveResponse',
        0x67: 'SecurityAccessPositiveResponse',
        0x68: 'CommunicationControlPositiveResponse',
        0x6A: 'ReadDataPeriodicIdentifierPositiveResponse',
        0x6C: 'DynamicallyDefineDataIdentifierPositiveResponse',
        0x6E: 'WriteDataByIdentifierPositiveResponse',
        0x6F: 'InputOutputControlByIdentifierPositiveResponse',
        0x71: 'RoutineControlPositiveResponse',
        0x74: 'RequestDownloadPositiveResponse',
        0x75: 'RequestUploadPositiveResponse',
        0x76: 'TransferDataPositiveResponse',
        0x77: 'RequestTransferExitPositiveResponse',
        0x7D: 'WriteMemoryByAddressPositiveResponse',
        0x7E: 'TesterPresentPositiveResponse',
        0x83: 'AccessTimingParameter',
        0x84: 'SecuredDataTransmission',
        0x85: 'ControlDTCSetting',
        0x86: 'ResponseOnEvent',
        0x87: 'LinkControl',
        0xC3: 'AccessTimingParameterPositiveResponse',
        0xC4: 'SecuredDataTransmissionPositiveResponse',
        0xC5: 'ControlDTCSettingPositiveResponse',
        0xC6: 'ResponseOnEventPositiveResponse',
        0xC7: 'LinkControlPositiveResponse',
        0x7f: 'NegativeResponse'
    })
    name = 'UDS'
    fields_desc = [XByteEnumField('service', 0, services)]

    def answers(self, other):
        if other.__class__ != self.__class__:
            return False
        if self.service == 0x7f:
            return self.payload.answers(other)
        if self.service == (other.service + 0x40):
            if isinstance(self.payload, NoPayload) or \
                    isinstance(other.payload, NoPayload):
                return len(self) <= len(other)
            else:
                return self.payload.answers(other.payload)
        return False

    def hashret(self):
        if self.service == 0x7f:
            return struct.pack('B', self.requestServiceId)
        return struct.pack('B', self.service & ~0x40)
Example #18
0
class UDS(Packet):
    services = ObservableDict({
        0x10: 'DiagnosticSessionControl',
        0x11: 'ECUReset',
        0x14: 'ClearDiagnosticInformation',
        0x19: 'ReadDTCInformation',
        0x22: 'ReadDataByIdentifier',
        0x23: 'ReadMemoryByAddress',
        0x24: 'ReadScalingDataByIdentifier',
        0x27: 'SecurityAccess',
        0x28: 'CommunicationControl',
        0x2A: 'ReadDataPeriodicIdentifier',
        0x2C: 'DynamicallyDefineDataIdentifier',
        0x2E: 'WriteDataByIdentifier',
        0x2F: 'InputOutputControlByIdentifier',
        0x31: 'RoutineControl',
        0x34: 'RequestDownload',
        0x35: 'RequestUpload',
        0x36: 'TransferData',
        0x37: 'RequestTransferExit',
        0x3D: 'WriteMemoryByAddress',
        0x3E: 'TesterPresent',
        0x50: 'DiagnosticSessionControlPositiveResponse',
        0x51: 'ECUResetPositiveResponse',
        0x54: 'ClearDiagnosticInformationPositiveResponse',
        0x59: 'ReadDTCInformationPositiveResponse',
        0x62: 'ReadDataByIdentifierPositiveResponse',
        0x63: 'ReadMemoryByAddressPositiveResponse',
        0x64: 'ReadScalingDataByIdentifierPositiveResponse',
        0x67: 'SecurityAccessPositiveResponse',
        0x68: 'CommunicationControlPositiveResponse',
        0x6A: 'ReadDataPeriodicIdentifierPositiveResponse',
        0x6C: 'DynamicallyDefineDataIdentifierPositiveResponse',
        0x6E: 'WriteDataByIdentifierPositiveResponse',
        0x6F: 'InputOutputControlByIdentifierPositiveResponse',
        0x71: 'RoutineControlPositiveResponse',
        0x74: 'RequestDownloadPositiveResponse',
        0x75: 'RequestUploadPositiveResponse',
        0x76: 'TransferDataPositiveResponse',
        0x77: 'RequestTransferExitPositiveResponse',
        0x7D: 'WriteMemoryByAddressPositiveResponse',
        0x7E: 'TesterPresentPositiveResponse',
        0x83: 'AccessTimingParameter',
        0x84: 'SecuredDataTransmission',
        0x85: 'ControlDTCSetting',
        0x86: 'ResponseOnEvent',
        0x87: 'LinkControl',
        0xC3: 'AccessTimingParameterPositiveResponse',
        0xC4: 'SecuredDataTransmissionPositiveResponse',
        0xC5: 'ControlDTCSettingPositiveResponse',
        0xC6: 'ResponseOnEventPositiveResponse',
        0xC7: 'LinkControlPositiveResponse',
        0x7f: 'NegativeResponse'
    })
    name = 'UDS'
    fields_desc = [XByteEnumField('service', 0, services)]

    def answers(self, other):
        """DEV: true if self is an answer from other"""
        if other.__class__ == self.__class__:
            return (other.service + 0x40) == self.service or \
                   (self.service == 0x7f and
                    self.requestServiceId == other.service and
                    (self.negativeResponseCode != 0x78 or
                     conf.contribs['UDS']['treat-response-pending-as-answer']))
        return 0

    def hashret(self):
        if self.service == 0x7f:
            return struct.pack('B', self.requestServiceId)
        return struct.pack('B', self.service & ~0x40)
Example #19
0
class GMLAN(Packet):
    @staticmethod
    def determine_len(x):
        if conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] is None:
            warning("Define conf.GMLAN_ECU_AddressingScheme! "
                    "Assign either 2,3 or 4")
        if conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] \
                not in [2, 3, 4]:
            warning("Define conf.GMLAN_ECU_AddressingScheme! "
                    "Assign either 2,3 or 4")
        return conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] == x

    services = ObservableDict(
        {0x04: 'ClearDiagnosticInformation',
         0x10: 'InitiateDiagnosticOperation',
         0x12: 'ReadFailureRecordData',
         0x1a: 'ReadDataByIdentifier',
         0x20: 'ReturnToNormalOperation',
         0x22: 'ReadDataByParameterIdentifier',
         0x23: 'ReadMemoryByAddress',
         0x27: 'SecurityAccess',
         0x28: 'DisableNormalCommunication',
         0x2c: 'DynamicallyDefineMessage',
         0x2d: 'DefinePIDByAddress',
         0x34: 'RequestDownload',
         0x36: 'TransferData',
         0x3b: 'WriteDataByIdentifier',
         0x3e: 'TesterPresent',
         0x44: 'ClearDiagnosticInformationPositiveResponse',
         0x50: 'InitiateDiagnosticOperationPositiveResponse',
         0x52: 'ReadFailureRecordDataPositiveResponse',
         0x5a: 'ReadDataByIdentifierPositiveResponse',
         0x60: 'ReturnToNormalOperationPositiveResponse',
         0x62: 'ReadDataByParameterIdentifierPositiveResponse',
         0x63: 'ReadMemoryByAddressPositiveResponse',
         0x67: 'SecurityAccessPositiveResponse',
         0x68: 'DisableNormalCommunicationPositiveResponse',
         0x6c: 'DynamicallyDefineMessagePositiveResponse',
         0x6d: 'DefinePIDByAddressPositiveResponse',
         0x74: 'RequestDownloadPositiveResponse',
         0x76: 'TransferDataPositiveResponse',
         0x7b: 'WriteDataByIdentifierPositiveResponse',
         0x7e: 'TesterPresentPositiveResponse',
         0x7f: 'NegativeResponse',
         0xa2: 'ReportProgrammingState',
         0xa5: 'ProgrammingMode',
         0xa9: 'ReadDiagnosticInformation',
         0xaa: 'ReadDataByPacketIdentifier',
         0xae: 'DeviceControl',
         0xe2: 'ReportProgrammingStatePositiveResponse',
         0xe5: 'ProgrammingModePositiveResponse',
         0xe9: 'ReadDiagnosticInformationPositiveResponse',
         0xea: 'ReadDataByPacketIdentifierPositiveResponse',
         0xee: 'DeviceControlPositiveResponse'})
    name = 'General Motors Local Area Network'
    fields_desc = [
        XByteEnumField('service', 0, services)
    ]

    def answers(self, other):
        """DEV: true if self is an answer from other"""
        if other.__class__ == self.__class__:
            return (other.service + 0x40) == self.service or \
                   (self.service == 0x7f and
                    (self.requestServiceId == other.service))
        return 0

    def hashret(self):
        if self.service == 0x7f:
            return struct.pack('B', self.requestServiceId)
        return struct.pack('B', self.service & ~0x40)
Example #20
0
class GMLAN(ISOTP):
    @staticmethod
    def determine_len(x):
        if conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] is None:
            warning(
                "Define conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme']! "  # noqa: E501
                "Assign either 2,3 or 4")
        if conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] \
                not in [2, 3, 4]:
            warning(
                "Define conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme']! "  # noqa: E501
                "Assign either 2,3 or 4")
        return conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] == x

    services = ObservableDict({
        0x04: 'ClearDiagnosticInformation',
        0x10: 'InitiateDiagnosticOperation',
        0x12: 'ReadFailureRecordData',
        0x1a: 'ReadDataByIdentifier',
        0x20: 'ReturnToNormalOperation',
        0x22: 'ReadDataByParameterIdentifier',
        0x23: 'ReadMemoryByAddress',
        0x27: 'SecurityAccess',
        0x28: 'DisableNormalCommunication',
        0x2c: 'DynamicallyDefineMessage',
        0x2d: 'DefinePIDByAddress',
        0x34: 'RequestDownload',
        0x36: 'TransferData',
        0x3b: 'WriteDataByIdentifier',
        0x3e: 'TesterPresent',
        0x44: 'ClearDiagnosticInformationPositiveResponse',
        0x50: 'InitiateDiagnosticOperationPositiveResponse',
        0x52: 'ReadFailureRecordDataPositiveResponse',
        0x5a: 'ReadDataByIdentifierPositiveResponse',
        0x60: 'ReturnToNormalOperationPositiveResponse',
        0x62: 'ReadDataByParameterIdentifierPositiveResponse',
        0x63: 'ReadMemoryByAddressPositiveResponse',
        0x67: 'SecurityAccessPositiveResponse',
        0x68: 'DisableNormalCommunicationPositiveResponse',
        0x6c: 'DynamicallyDefineMessagePositiveResponse',
        0x6d: 'DefinePIDByAddressPositiveResponse',
        0x74: 'RequestDownloadPositiveResponse',
        0x76: 'TransferDataPositiveResponse',
        0x7b: 'WriteDataByIdentifierPositiveResponse',
        0x7e: 'TesterPresentPositiveResponse',
        0x7f: 'NegativeResponse',
        0xa2: 'ReportProgrammingState',
        0xa5: 'ProgrammingMode',
        0xa9: 'ReadDiagnosticInformation',
        0xaa: 'ReadDataByPacketIdentifier',
        0xae: 'DeviceControl',
        0xe2: 'ReportProgrammingStatePositiveResponse',
        0xe5: 'ProgrammingModePositiveResponse',
        0xe9: 'ReadDiagnosticInformationPositiveResponse',
        0xea: 'ReadDataByPacketIdentifierPositiveResponse',
        0xee: 'DeviceControlPositiveResponse'
    })
    name = 'General Motors Local Area Network'
    fields_desc = [XByteEnumField('service', 0, services)]

    def answers(self, other):
        if other.__class__ != self.__class__:
            return False
        if self.service == 0x7f:
            return self.payload.answers(other)
        if self.service == (other.service + 0x40):
            if isinstance(self.payload, NoPayload) or \
                    isinstance(other.payload, NoPayload):
                return True
            else:
                return self.payload.answers(other.payload)
        return False

    def hashret(self):
        if self.service == 0x7f:
            return struct.pack('B', self.requestServiceId)
        return struct.pack('B', self.service & ~0x40)

    @staticmethod
    def modifies_ecu_state(pkt, ecu):
        if pkt.service == 0x50:
            ecu.current_session = 3
        elif pkt.service == 0x60:
            ecu.current_session = 1
            ecu.communication_control = 0
            ecu.current_security_level = 0
        elif pkt.service == 0x68:
            ecu.communication_control = 1
        elif pkt.service == 0xe5:
            ecu.current_session = 2
Example #21
0
class GMLAN_RDBI(Packet):
    dataIdentifiers = ObservableDict({
        0x90:
        "$90: VehicleIdentificationNumber (VIN)",
        0x92:
        "$92: SystemSupplierId (SYSSUPPID)",
        0x97:
        "$97: SystemNameOrEngineType (SNOET)",
        0x98:
        "$98: RepairShopCodeOrTesterSerialNumber (RSCOTSN)",
        0x99:
        "$99: ProgrammingDate (PD)",
        0x9a:
        "$9a: DiagnosticDataIdentifier (DDI)",
        0x9b:
        "$9b: XmlConfigurationCompatibilityIdentifier (XMLCCID)",
        0x9C:
        "$9C: XmlDataFilePartNumber (XMLDFPN)",
        0x9D:
        "$9D: XmlDataFileAlphaCode (XMLDFAC)",
        0x9F:
        "$9F: PreviousStoredRepairShopCodeOrTesterSerialNumbers "
        "(PSRSCOTSN)",
        0xA0:
        "$A0: manufacturers_enable_counter (MEC)",
        0xA1:
        "$A1: ECUConfigurationOrCustomizationData (ECUCOCGD) 1",
        0xA2:
        "$A2: ECUConfigurationOrCustomizationData (ECUCOCGD) 2",
        0xA3:
        "$A3: ECUConfigurationOrCustomizationData (ECUCOCGD) 3",
        0xA4:
        "$A4: ECUConfigurationOrCustomizationData (ECUCOCGD) 4",
        0xA5:
        "$A5: ECUConfigurationOrCustomizationData (ECUCOCGD) 5",
        0xA6:
        "$A6: ECUConfigurationOrCustomizationData (ECUCOCGD) 6",
        0xA7:
        "$A7: ECUConfigurationOrCustomizationData (ECUCOCGD) 7",
        0xA8:
        "$A8: ECUConfigurationOrCustomizationData (ECUCOCGD) 8",
        0xB0:
        "$B0: ECUDiagnosticAddress (ECUADDR)",
        0xB1:
        "$B1: ECUFunctionalSystemsAndVirtualDevices (ECUFSAVD)",
        0xB2:
        "$B2: GM ManufacturingData (GMMD)",
        0xB3:
        "$B3: Data Universal Numbering System Identification (DUNS)",
        0xB4:
        "$B4: Manufacturing Traceability Characters (MTC)",
        0xB5:
        "$B5: GM BroadcastCode (GMBC)",
        0xB6:
        "$B6: GM Target Vehicle (GMTV)",
        0xB7:
        "$B7: GM Software Usage Description (GMSUD)",
        0xB8:
        "$B8: GM Bench Verification Information (GMBVI)",
        0xB9:
        "$B9: Subnet_Config_List_HighSpeed (SCLHS)",
        0xBA:
        "$BA: Subnet_Config_List_LowSpeed (SCLLS)",
        0xBB:
        "$BB: Subnet_Config_List_MidSpeed (SCLMS)",
        0xBC:
        "$BC: Subnet_Config_List_NonCan 1 (SCLNC 1)",
        0xBD:
        "$BD: Subnet_Config_List_NonCan 2 (SCLNC 2)",
        0xBE:
        "$BE: Subnet_Config_List_LIN (SCLLIN)",
        0xBF:
        "$BF: Subnet_Config_List_GMLANChassisExpansionBus (SCLGCEB)",
        0xC0:
        "$C0: BootSoftwarePartNumber (BSPN)",
        0xC1:
        "$C1: SoftwareModuleIdentifier (SWMI) 01",
        0xC2:
        "$C2: SoftwareModuleIdentifier (SWMI) 02",
        0xC3:
        "$C3: SoftwareModuleIdentifier (SWMI) 03",
        0xC4:
        "$C4: SoftwareModuleIdentifier (SWMI) 04",
        0xC5:
        "$C5: SoftwareModuleIdentifier (SWMI) 05",
        0xC6:
        "$C6: SoftwareModuleIdentifier (SWMI) 06",
        0xC7:
        "$C7: SoftwareModuleIdentifier (SWMI) 07",
        0xC8:
        "$C8: SoftwareModuleIdentifier (SWMI) 08",
        0xC9:
        "$C9: SoftwareModuleIdentifier (SWMI) 09",
        0xCA:
        "$CA: SoftwareModuleIdentifier (SWMI) 10",
        0xCB:
        "$CB: EndModelPartNumber",
        0xCC:
        "$CC: BaseModelPartNumber (BMPN)",
        0xD0:
        "$D0: BootSoftwarePartNumberAlphaCode",
        0xD1:
        "$D1: SoftwareModuleIdentifierAlphaCode (SWMIAC) 01",
        0xD2:
        "$D2: SoftwareModuleIdentifierAlphaCode (SWMIAC) 02",
        0xD3:
        "$D3: SoftwareModuleIdentifierAlphaCode (SWMIAC) 03",
        0xD4:
        "$D4: SoftwareModuleIdentifierAlphaCode (SWMIAC) 04",
        0xD5:
        "$D5: SoftwareModuleIdentifierAlphaCode (SWMIAC) 05",
        0xD6:
        "$D6: SoftwareModuleIdentifierAlphaCode (SWMIAC) 06",
        0xD7:
        "$D7: SoftwareModuleIdentifierAlphaCode (SWMIAC) 07",
        0xD8:
        "$D8: SoftwareModuleIdentifierAlphaCode (SWMIAC) 08",
        0xD9:
        "$D9: SoftwareModuleIdentifierAlphaCode (SWMIAC) 09",
        0xDA:
        "$DA: SoftwareModuleIdentifierAlphaCode (SWMIAC) 10",
        0xDB:
        "$DB: EndModelPartNumberAlphaCode",
        0xDC:
        "$DC: BaseModelPartNumberAlphaCode",
        0xDD:
        "$DD: SoftwareModuleIdentifierDataIdentifiers (SWMIDID)",
        0xDE:
        "$DE: GMLANIdentificationData (GMLANID)",
        0xDF:
        "$DF: ECUOdometerValue (ECUODO)",
        0xE0:
        "$E0: VehicleLevelDataRecord (VLDR) 0",
        0xE1:
        "$E1: VehicleLevelDataRecord (VLDR) 1",
        0xE2:
        "$E2: VehicleLevelDataRecord (VLDR) 2",
        0xE3:
        "$E3: VehicleLevelDataRecord (VLDR) 3",
        0xE4:
        "$E4: VehicleLevelDataRecord (VLDR) 4",
        0xE5:
        "$E5: VehicleLevelDataRecord (VLDR) 5",
        0xE6:
        "$E6: VehicleLevelDataRecord (VLDR) 6",
        0xE7:
        "$E7: VehicleLevelDataRecord (VLDR) 7",
        0xE8:
        "$E8: Subnet_Config_List_GMLANPowertrainExpansionBus (SCLGPEB)",
        0xE9:
        "$E9: Subnet_Config_List_GMLANFrontObjectExpansionBus "
        "(SCLGFOEB)",
        0xEA:
        "$EA: Subnet_Config_List_GMLANRearObjectExpansionBus (SCLGROEB)",
        0xEB:
        "$EB: Subnet_Config_List_GMLANExpansionBus1 (SCLGEB1)",
        0xEC:
        "$EC: Subnet_Config_List_GMLANExpansionBus2 (SCLGEB2)",
        0xED:
        "$ED: Subnet_Config_List_GMLANExpansionBus3 (SCLGEB3)",
        0xEE:
        "$EE: Subnet_Config_List_GMLANExpansionBus4 (SCLGEB4)",
        0xEF:
        "$EF: Subnet_Config_List_GMLANExpansionBus5 (SCLGEB5)",
    })

    name = 'ReadDataByIdentifier'
    fields_desc = [XByteEnumField('dataIdentifier', 0, dataIdentifiers)]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%GMLAN.service%"), \
            pkt.sprintf("%GMLAN_RDBI.dataIdentifier%")
Example #22
0
File: uds.py Project: xambroz/scapy
class UDS_RSDBI(Packet):
    name = 'ReadScalingDataByIdentifier'
    dataIdentifiers = ObservableDict()
    fields_desc = [XShortEnumField('dataIdentifier', 0, dataIdentifiers)]
Example #23
0
class KWP(ISOTP):
    services = ObservableDict({
        0x10: 'StartDiagnosticSession',
        0x11: 'ECUReset',
        0x14: 'ClearDiagnosticInformation',
        0x17: 'ReadStatusOfDiagnosticTroubleCodes',
        0x18: 'ReadDiagnosticTroubleCodesByStatus',
        0x1A: 'ReadECUIdentification',
        0x21: 'ReadDataByLocalIdentifier',
        0x22: 'ReadDataByIdentifier',
        0x23: 'ReadMemoryByAddress',
        0x27: 'SecurityAccess',
        0x28: 'DisableNormalMessageTransmission',
        0x29: 'EnableNormalMessageTransmission',
        0x2C: 'DynamicallyDefineLocalIdentifier',
        0x2E: 'WriteDataByIdentifier',
        0x30: 'InputOutputControlByLocalIdentifier',
        0x31: 'StartRoutineByLocalIdentifier',
        0x32: 'StopRoutineByLocalIdentifier',
        0x33: 'RequestRoutineResultsByLocalIdentifier',
        0x34: 'RequestDownload',
        0x35: 'RequestUpload',
        0x36: 'TransferData',
        0x37: 'RequestTransferExit',
        0x3B: 'WriteDataByLocalIdentifier',
        0x3D: 'WriteMemoryByAddress',
        0x3E: 'TesterPresent',
        0x85: 'ControlDTCSetting',
        0x86: 'ResponseOnEvent',
        0x50: 'StartDiagnosticSessionPositiveResponse',
        0x51: 'ECUResetPositiveResponse',
        0x54: 'ClearDiagnosticInformationPositiveResponse',
        0x57: 'ReadStatusOfDiagnosticTroubleCodesPositiveResponse',
        0x58: 'ReadDiagnosticTroubleCodesByStatusPositiveResponse',
        0x5A: 'ReadECUIdentificationPositiveResponse',
        0x61: 'ReadDataByLocalIdentifierPositiveResponse',
        0x62: 'ReadDataByIdentifierPositiveResponse',
        0x63: 'ReadMemoryByAddressPositiveResponse',
        0x67: 'SecurityAccessPositiveResponse',
        0x68: 'DisableNormalMessageTransmissionPositiveResponse',
        0x69: 'EnableNormalMessageTransmissionPositiveResponse',
        0x6C: 'DynamicallyDefineLocalIdentifierPositiveResponse',
        0x6E: 'WriteDataByIdentifierPositiveResponse',
        0x70: 'InputOutputControlByLocalIdentifierPositiveResponse',
        0x71: 'StartRoutineByLocalIdentifierPositiveResponse',
        0x72: 'StopRoutineByLocalIdentifierPositiveResponse',
        0x73: 'RequestRoutineResultsByLocalIdentifierPositiveResponse',
        0x74: 'RequestDownloadPositiveResponse',
        0x75: 'RequestUploadPositiveResponse',
        0x76: 'TransferDataPositiveResponse',
        0x77: 'RequestTransferExitPositiveResponse',
        0x7B: 'WriteDataByLocalIdentifierPositiveResponse',
        0x7D: 'WriteMemoryByAddressPositiveResponse',
        0x7E: 'TesterPresentPositiveResponse',
        0xC5: 'ControlDTCSettingPositiveResponse',
        0xC6: 'ResponseOnEventPositiveResponse',
        0x7f: 'NegativeResponse'
    })  # type: Dict[int, str]
    name = 'KWP'
    fields_desc = [XByteEnumField('service', 0, services)]

    def answers(self, other):
        # type: (Packet) -> bool
        if not isinstance(other, type(self)):
            return False
        if self.service == 0x7f:
            return self.payload.answers(other)
        if self.service == (other.service + 0x40):
            if isinstance(self.payload, NoPayload) or \
                    isinstance(other.payload, NoPayload):
                return len(self) <= len(other)
            else:
                return self.payload.answers(other.payload)
        return False

    def hashret(self):
        # type: () -> bytes
        if self.service == 0x7f:
            return struct.pack('B', self.requestServiceId)
        else:
            return struct.pack('B', self.service & ~0x40)
Example #24
0
class KWP_RDBI(Packet):
    dataIdentifiers = ObservableDict()
    name = 'ReadDataByIdentifier'
    fields_desc = [XShortEnumField('identifier', 0, dataIdentifiers)]