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 related
🔝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).
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)
ESP-IDF-CANBus-Monitor - Monitor Canbus traffic ESP32.
connected-car - Connecting a Nissan e-NV200 (or Leaf) to MQTT.
PSASteeringWheelAdapter - ESP32 based steering wheel adapter for Peugeot and Citroen cars.
esp32-slcan - ESP32 slcan compatible device.
esp32s3-slcan - SLCAN implementation for ESP32-S3 (based on esp32-slcan).
SBC
SBC - Single Board Computers.
beaglebone_black_socketcan - How to get access to the CAN bus on a BeagleBone Black via socketcan interface.
rpi-can-logger - Project to log CAN bus data from a PiCAN2 and a GPS module.
CANoPi - CAN interface for Raspberry Pi Zero.
Others HW
Michrochip CAN BUS Analyzer on PIC18F2550/PIC18F2680 Firmware - Michrochip CAN BUS Analyzer firmware.
Michrochip CAN BUS Analyzer on PIC18F2550/PIC18F2680 Driver - Linux kernel driver for Microchip CAN BUS Analyzer Tool.
BB-to-STM32 - LED sync between BeagleBone Black and STM32F4 Discovery Board.
elm327_clone - ELM327 firmware for pic18f25k80 chip from china clone OBD2.
Hardware related tools
CAN Bus Bit Timing Calculator - Online tool for obsolete SJA1000 and MCP2510 (probably it works for MCP2515).
STM8S208 CAN Speed Calculator - CAN Speed Calculator for STM8 (perhaps it also works for STM32 family).
Contributing
Your contributions are always welcome! Please read the contribution guidelines first.
Footnotes
Please follow this root-repo for lastest updates.
Also might be useful this curated list of awesome tools and resources for LIN bus reverse engineering, LIN hardware development and debugging.
Last updated