{"id":23626,"library":"doipclient","title":"Diagnostic over IP (DoIP) Client","description":"A Python implementation of a client for ISO-13400-2 (Diagnostic over IP). It provides a DoIPClient class for connecting to automotive ECUs over Ethernet, supporting routing activation, diagnostic message sending, and vehicle discovery. Version 1.1.8 is the latest stable release, with active maintenance.","status":"active","version":"1.1.8","language":"python","source_language":"en","source_url":"https://github.com/jacobschaer/python-doipclient","tags":["automotive","diagnostics","doip","iso-13400","uds","ethernet"],"install":[{"cmd":"pip install doipclient","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Optional dependency for UDS diagnostics over DoIP","package":"udsoncan","optional":true}],"imports":[{"note":"Common mistake due to package name misleading","wrong":"from doip.client import DoIPClient","symbol":"DoIPClient","correct":"from doipclient import DoIPClient"},{"note":"DoIPConnectionException is in connectors module","wrong":"from doipclient import DoIPConnectionException","symbol":"DoIPConnectionException","correct":"from doipclient.connectors import DoIPConnectionException"}],"quickstart":{"code":"from doipclient import DoIPClient\n\nclient = DoIPClient('192.168.0.10', 13400)\nclient.send_diagnostic(b'\\x22\\xf1\\x90')  # Example UDS request","lang":"python","description":"Basic connection to a DoIP ECU and sending a diagnostic request."},"warnings":[{"fix":"Update code that checks for response codes using numeric values or enum names.","message":"In v1.1.3, RoutingActivationResponse.ResponseCode changed: DeniedRequiresTLS enum value corrected from 0x6 to 0x7, and 0x6 now maps to DeniedUnsupportedActivationType.","severity":"breaking","affected_versions":">=1.1.3"},{"fix":"If you need custom TLS, pass an SSLContext instead of True.","message":"The use_secure parameter in the DoIPClient constructor also accepts an ssl.SSLContext. When passed True, a default context is used. When passed an SSLContext, it uses that context directly.","severity":"gotcha","affected_versions":">=1.0.9"},{"fix":"Use await_vehicle_announcement() for broader discovery.","message":"The get_entity() method for ECU discovery only works over IPv4 broadcast, not multicast. It may not detect all ECUs in complex networks.","severity":"gotcha","affected_versions":">=1.1.0"},{"fix":"Refer to the latest docs; use per-method timeouts if available.","message":"The 'timeout' parameter in the constructor may be deprecated in favor of a per-call timeout. Check documentation for current status.","severity":"deprecated","affected_versions":"?"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"pip install doipclient","cause":"Package not installed or installed in wrong environment.","error":"ModuleNotFoundError: No module named 'doipclient'"},{"fix":"Verify ECU IP and port (default 13400). Check network connectivity and firewall.","cause":"ECU not reachable at the given IP/port or not accepting connections.","error":"doipclient.connectors.DoIPConnectionException: Connection refused"},{"fix":"from doipclient.connectors import DoIPConnectionException","cause":"Incorrect import path.","error":"ImportError: cannot import name 'DoIPConnectionException' from 'doipclient'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}