Skip to main content

python-doipclient

https://github.com/jacobschaer/python-doipclient/actions/workflows/tests.yml/badge.svg?branch=main

doipclient is a pure Python 3 Diagnostic over IP (DoIP) client which can be used for communicating with modern ECU’s over automotive ethernet. It implements the majority of ISO-13400 (2019) from the perspective of a short-lived synchronous client. The primary use case is to serve as a transport layer implementation for the udsoncan library. The code is published under MIT license on GitHub (jacobschaer/python-doipclient).

Documentation

The documentation is available here : https://python-doipclient.readthedocs.io/

Requirements

  • Python 3.6+

Installation

using pip:

pip install doipclient

Running Tests from source

using pytest:

pip install pytest pytest-mock
pytest

Example

Updated version of udsoncan’s example using python_doip instead of IsoTPSocketConnection

import SomeLib.SomeCar.SomeModel as MyCar

import udsoncan
from doipclient import DoIPClient
from doipclient.connectors import DoIPClientUDSConnector
from udsoncan.client import Client
from udsoncan.exceptions import *
from udsoncan.services import *

udsoncan.setup_logging()

ecu_ip = '127.0.0.1'
ecu_logical_address = 0x00E0
doip_client = DoIPClient(ecu_ip, ecu_logical_address)
conn = DoIPClientUDSConnector(doip_client)
with Client(conn, request_timeout=2, config=MyCar.config) as client:
   try:
      client.change_session(DiagnosticSessionControl.Session.extendedDiagnosticSession)  # integer with value of 3
      client.unlock_security_access(MyCar.debug_level)                                   # Fictive security level. Integer coming from fictive lib, let's say its value is 5
      client.write_data_by_identifier(udsoncan.DataIdentifier.VIN, 'ABC123456789')       # Standard ID for VIN is 0xF190. Codec is set in the client configuration
      print('Vehicle Identification Number successfully changed.')
      client.ecu_reset(ECUReset.ResetType.hardReset)                                     # HardReset = 0x01
   except NegativeResponseException as e:
      print('Server refused our request for service %s with code "%s" (0x%02x)' % (e.response.service.get_name(), e.response.code_name, e.response.code))
   except (InvalidResponseException, UnexpectedResponseException) as e:
      print('Server sent an invalid payload : %s' % e.response.original_payload)

   # Because we reset our UDS server, we must also reconnect/reactivate the DoIP socket
   # Alternatively, we could have used the auto_reconnect_tcp flag on the DoIPClient
   # Note: ECU's do not restart instantly, so you may need a sleep() before moving on
   doip_client.reconnect()
   client.tester_present()

# Cleanup the DoIP Socket when we're done. Alternatively, we could have used the
# close_connection flag on conn so that the udsoncan client would clean it up
doip_client.close()

python-uds Support

The python-uds can also be used but requires a fork until the owner merges this PR Doip #63. For now, to use the port:

using pip:

git clone https://github.com/jacobschaer/python-uds
git checkout doip
cd python-uds
pip install .

Example:

from uds import Uds

ecu = Uds(transportProtocol="DoIP", ecu_ip="192.168.1.1", ecu_logical_address=1)
try:
    response = ecu.send([0x3E, 0x00])
    print(response)  # This should be [0x7E, 0x00]
except:
    print("Send did not complete")

Metadata

Release files for doipclient 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for doipclient 1.3.0
File Size Uploaded Provenance Actions
doipclient-1.3.0.tar.gz 26.7 kB Without provenance Details for doipclient-1.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for doipclient 1.3.0
File Interpreter ABI Platform Actions
doipclient-1.3.0-py3-none-any.whl Python 3 none any Details for doipclient-1.3.0-py3-none-any.whl

Total release size: 47.5 kB

Release files / doipclient-1.3.0.tar.gz

Download URL doipclient-1.3.0.tar.gz
Size 26.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4251368f300f1422aaa7bc2c37fea8dbab63b4e33e47fb0122834cb6915d96f6
BLAKE2b-256 checksum
How to use checksums
4968464d26bf82ef136070959482fddfaa39c4706d6fe6187b7556d031668be6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.0

Release files / doipclient-1.3.0-py3-none-any.whl

Download URL doipclient-1.3.0-py3-none-any.whl
Size 20.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a124f161bf7c848516cb4e6a0a47a87e6a58b175a4c2bd05d71f63d8c20c6c5
BLAKE2b-256 checksum
How to use checksums
b3c34e30c8f64a9cb7f9ac190f8937fead8d75852fadfadaf285376dce4ed4ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.0

Security for doipclient 1.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page