Awesome CAN Bus

This curated list helps a reverse engineering CAN bus devices with lightly specializing in automotive embedded controller software and communication understanding.

Note Items marked as "🔝" are highly recommended.

Permanent URL to this list: https://github.com/iDoka/awesome-canbus

Contents

  • Hacking and Reverse Engineering tools

  • Test equipment and simulators

  • Protocols

    • OBD-II tools

    • UDS

    • ISO-TP

    • J1939 Tools

    • J2534 Tools

  • Utils

    • Common

    • Linux related

    • GUI Tools

    • Python Tools

    • CAN-over-IP

    • Other Utils

    • Libraries

    • Examples

  • CAN Database

    • Formats (DBC, KCD)

    • Converters and Parsers

    • DBC only

  • Hardware

    • ARM

    • Arduino

    • Espressif Systems (ESP8266, ESP32)

    • SBC

    • Others HW

    • Hardware related tools

Hacking and Reverse Engineering tools

  • 🔝CarHackingTools - Collection of Common Car Hacking Tools a scripts collection to help jump start car research and hacking.

  • 🔝Caring Caribou - A friendly car security exploration tool for the CAN bus.

  • 🔝CAN_Reverse_Engineering - Automated Payload Reverse Engineering Pipeline for the Controller Area Network (CAN) protocol.

  • 🔝carhacking - Car hacking scripts and docs collection.

  • ReCAN - Reverse engineering of Controller Area Networks.

  • parse_can_logs - Parse CAN logs and visualize data streams on plot.

  • reversegear - Offline Reverse Engineering Tools for Automotive Networks.

  • 🔝CANalyzat0r - Security analysis toolkit for proprietary car protocols.

  • 🔝CANToolz - Black-box CAN network analysis framework.

  • GVRET - Generalized Electric Vehicle Reverse Engineering Tool (Arduino FW).

Test equipment and simulators

  • ECU-simulator - Tool that simulates some vehicle diagnostic services. It can be used to test OBD-II dongles or tester tools that support the UDS (ISO 14229) and ISO-TP (ISO 15765-2) protocols.

  • ELM327-emulator - ELM327 Emulator for testing software interfacing OBDII via ELM327 adapter supporting multi-ECU simulation.

Protocols

OBD-II tools

  • DDT4All - Tool to create your own ECU parameters screens and connect to a CAN network with a cheap ELM327 interface.

  • ELM327SLCAN - ELM327 based vehicle's CAN bus sniffer.

  • Arduino-OBD2-Async - Arduino OBD library with asynchronous data requesting.

  • CAN-Shark - Working with OBD PIDs from Arduino + MCP2515 shield.

  • OBD2-Scantool - A python scantool to read OBD2 info from cars.

  • O2OO - OBD-II compliant car diagnostic tool. It reads sensor data from a car into an sqlite database.

  • freediag - Free diagnostic software for OBD-II compliant motor vehicles.

  • pyvit - Python Vehicle Interface Toolkit (archived).

UDS

ISO 14229 Standard

  • python-UDSonCAN - Python implementation of UDS ISO-14229 standard.

  • uds-c - Unified Diagnostics Service (UDS) and OBD-II C Library.

  • iso14229 - C implementation of UDS ISO-14229 server and client for embedded systems.

ISO-TP

ISO 15765-2 Standard

  • isotp-c - An implementation of the ISO-TP (ISO15765-2) CAN protocol in C.

  • python-can-IsoTP - Python implementation of the ISO-TP (ISO15765-2) CAN protocol.

  • CanTp - Implementation of the CanTp module (ISO 15765-2), according to AUTOSAR specification v4.4.0.

  • aioisotp - ISO-TP implemenation for asyncio Python.

J1939 Tools

SAE J1939 Standard

  • J1939-CANBUS - Supported Engines CAT, Perkins, Wartsalla, MTU, VOLVO.

  • J1939-Framework - Framework to work with J1939 Frames used in CAN bus in bus, car and trucks industries.

  • python-j1939 - SAE J1939 support dependent on python-can package. Provides codec and filtering by PGN but not full SPN decoding.

  • can-utils with J1939 support - Fork of can-utils with a few additional tools for J1939.

  • test-can-j1939 - How to use CAN J1939 on linux.

  • libj1939 - Library to work with J1939 Frames (intended to be used in microcontrollers).

  • Pretty-J1939 - Python libs and scripts for pretty-printing J1939 logs.

  • TruckDevil - A tool and framework for interacting with and assessing ECUs that use J1939 for communications on the CANBUS.

  • python-can-j1939 - Package provides SAE J1939 support for Python developers.

  • Open-SAE-J1939 - SAE J1939 protocol free to use for embedded systems or PC with CAN-bus.

J2534 Tools

SAE J2534 Standard

  • JCanalog - Easy To Use J2534 Vehicle Logger (left for history).

  • j2534-tcp - Virtual J2534 driver over TCP/IP.

  • SharpWrap2534 - The Ultimate J2534 Wrapper Suite.

  • gocanflasher - Trionic 5/7/8 CANbus flasher with J2534 support.

Utils

Common

  • 🔝cantools - Collection of CLI tools for the CAN bus network.

  • BUSMASTER - An Open Source Software tool to simulate, analyze and test data bus systems such as CAN.

  • signalbroker-server - Tool to read and write CAN/LIN/flexray and other buses using gRPC which allows usage of preferred language.

  • CANiBUS - CAN Device Vehicle Research Server (OpenGarages.org).

  • 🔝Linux CAN Utils - Linux-CAN / SocketCAN user space useful utils.

  • CAN support in Linux - Linux kernel support for CAN hardware interfaces.

  • SocketCAN - Linux kernel support (kernel >= 2.6).

  • J1939 - Linux kernel support (kernel >= 5.4) also see can-j1939 kernel module.

  • elmcan - Linux SocketCAN kernel driver for ELM327 based devices (kernel >= 6.0).

  • can-isotp - Linux Kernel Module for ISO 15765-2:2016 CAN transport protocol (part of the Linux kernel >= 5.10).

  • gs_usb - Linux/Windows CAN driver based on WCID for Geschwister Schneider USB/CAN devices and candleLight USB CAN interfaces.

GUI Tools

  • CANdevStudio from GENIVI - CAN simulation software using a drag-and-drop style GUI with interconnected functional blocks.

  • CANAL-View - Qt GUI for TouCAN USB to CAN bus converter.

  • wxCAN-Sniffer - CAN bus sniffer (PC side) with animation and chart.

  • CANLogger - CAN bus logger and analyzer tool.

  • Seeeed-USB-CAN-Analyzer - Closed source binary for noname Chinese USB-CAN adapter.

  • CANtact-app - Desktop application for CANtact hardware interface.

  • SavvyCAN - Cross-platform Qt based GUI analysis tool. Supports SocketCAN compatible interfaces.

  • openCanSuite - Set of tools for analyzing, simulating and visualizing a CAN system.

  • Plotter and Scanner from SmartGauges - Scanning and visualizing tool for automotive systems.

  • ICSim - Instrument Cluster Simulator for SocketCAN by OpenGarages.

  • CANgaroo - Qt-based CAN bus analyzer software.

  • CAN-X - C# CAN bus analyzer software.

  • CAN-Monitor-qt - Universal CAN bus monitoring program.

  • CANBUS-Analyzer - Development tool/companion software for graphs, displays and analyzes both known and unknown CANBUS packets.

  • SLSS-CANAnalyser - SLSS CANAnalyser is Windows CAN-Bus-Analysis-Software to show, record and evaluate CAN-Bus signals.

  • TSMaster - Powerful open environment for automotive bus monitoring, simulation, testing, diagnostics, calibration and so on (Closed source).

  • CAN++ - Windows program for receiving and transmitting CAN bus messages. After import of CAN data base files (*.dbc or *.kcd) CAN signals are shown in symbolic form. In addition they can be shown as graphics (wave forms).

  • CANcool - CAN bus Analyser and Simulation Software with CAN-FD support.

  • Kayak - Java-based CAN traffic GUI analysis tool (archived).

  • PlotJuggler - The Powerful Time Series Visualization Tool (With panda hardware, cabana and plotjuggler, you can quickly RE the entire car in a few days).

  • PlotJuggler::CAN-dbs - Plugin to visualize CAN .dbs (or .dbc?) files in PlotJuggler.

  • OpenSourceLogger - Data acquisition software that can collect measurement, analyze CAN-messages and send SAE-J1939 messages to other ECUs.

Python Tools

  • 🔝cantools - CAN BUS tools in Python.

  • 🔝python-can - CAN package provides controller area network support for Python developers.

CAN-over-IP

  • cannelloni - SocketCAN over Ethernet tunnel.

  • tincan - Visualization of CAN bus traffic via UDP interface.

  • pican - TCP CAN reader.

  • canny - Simple CAN-over-IP gateway.

Other Utils

  • Seeeed-USB-CAN-Linux - CLI Linux Support for noname Chinese USB-CAN adapter.

  • opendlv-device-can-replay - OpenDLV Microservice to replay captured CAN frames to a CAN interface.

  • c0f - CAN bus fingerprinting tool is designed to analyze CAN bus traffic and fingerprint the Maker and Model.

  • canqv - Quick CAN frame inspection using CAN_RAW.

  • Candle.NET - .NET wrapper for the Candle API for candlelight CAN bus gateways/analysers (e.g. CANable, CANtact, etc).

  • canSerializer - Lib for serializing and deserializing CAN frames for transmission over a non CAN transport layer (Can be used to transport CAN frames over UART, SPI, etc).

Libraries

  • libwecan - Header only lib to encode and decode CAN signal.

  • VCAN - A tiny virtual CAN and CAN-FD bus library in C.

  • IMCTFD - Improved Microchip CAN Teensy FlexData Library MCP2517FD.

  • go-socketcan - Golang library for SocketCAN.

  • Qt CAN Bus - A multiplatform C++ plugin based library with support for various CAN Devices (SocketCAN, Sys Tec, PEAK, Virtual).

  • JavaCAN - A Java binding library for SocketCAN with support for RAW, BCM and ISO-TP sockets using epoll-based event-driven IO.

  • iso15765-canbus - Implementation of ISO15765-2 in C.

Examples

  • CAN-Examples - Example C code for CAN Sockets on Linux.

  • socketcan-demo - Set of example programs which highlight how to make use of SocketCAN on Linux.

CAN Database

Formats (DBC, KCD)

DBC

DBC - The de facto standard for CAN databases is the DBC file format developed by Vector Informatik GmbH. It is a proprietary format in that no official public documentation or specification is available.

  • DBC Format Specification v1.0 - Leaked DBC file format specification v1.0 (the obsolete specification).

  • DBC Format - Brief explanations about various sections, many examples and explains multiplexed signals well.

  • DBC File Explained - A Simple Intro to DCB file format.

  • J1939 and DBC introduction - An Introduction to J1939 and DBC files.

  • 🔝cabana - CAN visualizer and DBC maker (a tool developed to view raw CAN data; one use for this is creating and editing CAN Dictionaries (DBC files)).

KCD

  • KCD - An open format to describe communication relationships in CAN. similar to DBC format but written in XML.

Converters and Parsers

  • 🔝cantools by Erik Moqvist - CAN tools in python for DBC, KCD, SYM, ARXML 4 and CDD file parsing.

  • cantools by Andreas Heitmann - A set of libraries and command line tools for handling ASC, BLF, CLG, VSB, MDF, and DBC files.

  • CanDB - Generate CAN dbc file with OEM defined CAN matrix (xls).

  • canmatrix - Converting CAN Database Formats .arxml .dbc .dbf .kcd.

  • CANBabel - Translator for several CAN description formats (supports KCD r/w and DBC read).

  • can4python - A useful package for showing the contents of KCD files (also those converted from DBC files).

DBC only

  • Vector DBC - Library to access CAN Databases (aka CANdb, aka DBC files) from Vector Informatik.

  • dbcppp - C/C++ DBC file parser/tool.

  • can_decoder - API module for decoding raw CAN bus data to physical values using a DBC CAN database.

  • CANdb from GENIVI - Library for parsing DBC - CAN bus database description formats.

  • dbc-parser - A Flex/Bison/Lemon parser/scanner for DBC files.

  • Vector CANdb++ DBC file parser - Modified version of the dbc file parser of eerimoq.

  • dbc_reader - Virtual can bus reader from dbc file (python).

  • CAN_BUS_DBC_VIEWER - GUI based CAN bus dbc viewer.

  • dbcview - DBC visualization tool - plots a graph of sending and receiving nodes linked by messages.

  • VectorDbcChecker - Vector DBC Checker a Python GUI application for checking DBC files for messages duplication, missed network nodes, signals overlap in message, etc.

  • pydbc - AST generator for dbc format.

  • pydbc - Process vehicle network descriptions (CAN .dbc files).

Hardware

All kind of HW like CAN bus USB2CAN dongles, loggers, sniffers, adapters, etc.

ARM

  • USB_CAN-FD on ATSAME51 - This is an Open Source Hardware USB to CAN-FD Interface (ATSAME51J).

  • SuperCAN - An open source USB to CAN-FD protocol firmware (ATSAME51).

  • FlexCAN - Arduino library for CAN on Teensy 3.1, 3.2, 3.5, and 3.6.

  • ELM327 - Open-source ELM327 OBD adapter based on LPC1517JDB48.

  • Open-OBD2-datalogger - NXP Kinetis E datalogger that saves live engine data to SD card (Visualization is done with HTML5 and JavaScript).

  • CANBootloader - GUI + CAN booloader protocol.

STM32

  • 🔝panda - It supports 3x CAN, 2x LIN, and 1x GMLAN (and it has J2534 over USB on host side). It uses an STM32F413 (Using a panda with cabana provides the best RE and development suites for CANBUS).

  • 🔝STM32duino_CAN_Library - CanBus library for STM32F103 running on STM32duino.

  • 🔝pcan_pro_x - PEAK PCAN PRO/PRO FD firmware for STM32F4 based boards.

  • CANnon - A versatile CAN bootloader for the STM32 and friends.

  • hadoucan-fw on STM32H750 - Firmware for SM-1301 USB-CAN FD adapter based on.

  • CANCAN - CAN recorder based on STM32F407ZGTx.

  • stm32-CAN-bus-example-HAL-API - A simple example of CAN bus communications between two STM32 microcontrollers using the updated HAL API functions.

  • CAN-to-USB-lawicel-for-stm32 - CAN to USB adapter using Lawicel/Canhacker protocol based on STM32F103.

  • stm32-slcan - SLCAN compatible firmware for BluePill based on STM32f103C8T6.

  • cantact-pro-hw - Hardware for the CANtact Pro, use cantact-pro-fw as firmware.

  • STM32-CAN-Busadapter - CAN adapter on MCU stm32f303cb.

  • Ethernet-CAN converter - Based on STM32F407.

  • CANBUS_UART - CANBUS to UART for STM32F1 (BluePill and Nucleo boards).

  • Arduino-STM32-CAN - Can communication example for Arduino Core STM32.

  • eXoCAN - CAN Library for the STM32F103 aka Blue Pill.

  • CAN-BUS-Man-In-The-Middle - Dual CAN MitM-device based on STM32F105.

  • CAN-Bus-Arduino_Core_STM32 - Lowlevel CanBUS Example for Arduino Core STM32.

  • BudgetCANv2 - FW for use on STM32 microcontroller to implement FDCAN and USB using the STM32 HAL. Tested on BudgetCANv2-HW.

  • CanDybugFW - Embedded firmware of the CanDybug, a CAN bus traffic analyzer which uses a custom protocol over a USB serial port emulation (STM32F302/STM32F042).

  • CAN-USB-dongle-fw - A slcan firmware for the CVRA CAN to USB dongle (STM32F302).

  • zubax_babel - High performance CAN-USB/CAN-UART adapter + UAVCAN devboard (STM32F37x).

  • CAN-RS485-adapter - CAN-RS485 Adapter (STM32F103).

  • vector_can - Vector VN1610 protocol implementation for cheap STM32F407/405 hardware (Two CAN channel).

  • CAN_OMEGA - Ultimate CAN Bus hardware for Car hacking based on STM32F411. Full Featured firmware & software.

STM32F0x2 based HW

  • candleLight_fw - Compatible firmware for candleLight, cantact, canable, CANAlyze, VulCAN.

  • CANsniffer on STM32F042 - CANbus sniffer less complicated than existing commercial products.

  • candleLight - KiCAD project of usb-can adapter based on STM32F0.

  • cantact-hw - Hardware design files for the CANtact tool, use cantact-fw as firmware source.

  • cantact - Drivers and Command Line Interface for CANtact tools.

  • USB2CAN - Compact and isolated USB-to-CAN Adapter.

  • CANAlyze - An open source, native CAN interface for Linux that can be built entirely using open source tools, use canalyze-fw as firmware source.

  • Cantact FW - Cantact FirmWare by x893.

  • ELM329 - Open-source ELM329 OBD adapter based on STM32F042.

  • OBD2CAN - Bridge between any OBD2 compliant vehicle and the CAN bus interface (firmware is targeted for the STM32F072, and uses ChibiOS as a RTOS).

  • pcan_cantact - XCAN firmware for CANtact ( CANable ) or any other similar boards based on STM32F042.

  • kvaser_cantact - Xvaser LL v2 firmware for CANtact/CANable or any other similar boards based on STM32F042.

Arduino

  • 🔝arduino-canhacker - CanHacker (lawicel) CAN adapter on Arduino + MCP2515.

  • open-usb-can from Fabio Baltieri - CAN-to-USB dongle based on ATMega32U and MCP2515.

  • Arduino-CAN-bus-SD-logger - Arduino script to log CAN bus information to SD card. Mainly focused on J1939.

  • Arduino-canbus-monitor - Can bus monitoring tool based on arduino and can bus shield. Implements CAN ASCII/SLCAN protocol compatible with Lawicel CAN232/CANUSB.

  • Arduino-psa-comfort-can-adapter - Arduino sketch to operate new PSA (Peugeot, Citroen, DS, Opel) comfort devices (CAN2010) on old BSI CAN-BUS (CAN2004).

  • epasuino - Arduino based Speed sensitive electric power steering for automobiles Speed sensitive electric power steering for automobiles.

  • carfuino - Arduino based Automotive performance computer with Megasquirt integration.

  • W203-canbus - Arduino project for W211/W219 W203/W209 Mercedes (bluetooth audio control and more).

  • CANBus-Triple - The car hacking platform based on AVR and MCP2515 works with this firmware.

  • GVRET - Generalized Electric Vehicle Reverse Engineering Tool (Arduino FW).

Espressif Systems (ESP8266, ESP32)

SBC

SBC - Single Board Computers.

Others HW


Contributing

  • Your contributions are always welcome! Please read the contribution guidelines first.

Footnotes

  1. Please follow this root-repo for lastest updates.

  2. Also might be useful this curated list of awesome tools and resources for LIN bus reverse engineering, LIN hardware development and debugging.

Last updated