Skip to content

πŸš› Awesome CAN bus tools, hardware and resources for Cyber Security Researchers, Reverse Engineers, and Automotive Electronics Enthusiasts.

License

Notifications You must be signed in to change notification settings

iDoka/awesome-canbus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Awesome CAN Bus Awesome

GitHub stars GitHub forks GitHub watchers GitHub contributors GitHub pull-requests merged GitHub latest commit

CAN logo

🚜 Awesome Tools, Hardware And Resources For 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

  • πŸ”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).
  • UDSim - Unified Diagnostic Services Simulator and Fuzzer (successor of uds-server).
  • uds-server - CAN UDS Simulator and Fuzzer.
  • CANalyse - A vehicle network analysis and attack tool.
  • canhack - A low-level CAN protocol hacking library.
  • canDrive - Tools for hacking your car.
  • Carpunk - CAN injection toolkit and successor of CANghost.
  • CANghost - Automated Script For Hacking Into CAN Bus.
  • canTot - Quick and dirty canbus h4xing framework.
  • CANanalyze - This framework can be used to interact with automotive protocols like CAN/ISOTP/UDS.
  • Scapy - Python-based interactive packet manipulation program & library. Supports CAN/ISOTP/UDS/GMLAN plus many other protocols.
  • CAN-RE-Tool - Reverse engineering tool for systems based on CAN bus communications.
  • πŸ”can-explorer - A CAN bus visualization tool to aid in reverse engineering.

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.
  • embr::j1939 - Lean, portable J1939 library for embedded MCUs.

J2534 Tools

SAE J2534 Standard

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

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.
  • Seeed-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.
  • strym - Real time CAN data logging and visualization tool to work with USB-CAN Interface.
  • canviewer - GUI program that allows the inspection of incoming can-bus messages, either from recorder can-bus data or live data.
  • can4python - A package for handling CAN bus signals on Linux SocketCAN.
  • Python-Vector-CANoe - Control Vector CANoe API by Python.
  • CanCat - Swiss army knife of CAN often used in cars and building automation, etc.
  • Pyfuzz_can - May be used in research to inject messages into a truck and cause acceleration, cluster spoofing, and degrade brake performance.
  • Robotell-USB-CAN-Python - Python program for Robotell USB-CAN Adapter.
  • python-socketcan-monitor - Script to display data from a CAN bus over network interfaces.
  • CanoPy - A python gui used to visualize and plot message payloads in real time.
  • PythonVectorXL - Complete python ctypes wrapper lib for the Vector XL Driver Library. Contains the #define instructions, struct/union typdef instructions and function definitions (loads the DLL as well) of the 'vxlapi.h' (Windows only). Inspired by python-can.
  • py4can - Python utility to send and receive CAN messages through CANalyzer.

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

  • Seeed-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).
  • dbcc - DBC to C (and CSV, JSON and XML) compiler using the mpc parser combinator library.
  • convert_dbc_to_cpp_file - Util for convert dbc (canbus) to cpp(cplusplus) function.

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).
  • open-source-can-bridge - Gateway with several CAN interfaces based on Xmega.
  • arduino-mcp2515 - Arduino MCP2515 CAN interface library.
  • slcanuino - USB-CAN (SocketCAN) sketch for Arduino CAN-BUS shield.
  • CITM02 - CAN In The Middle (CITM) the Dual channel CANBUS adapter built around Arduino.
  • arduino-OBD2 - Arduino library for reading OBD-II data from your car over CAN bus.
  • arduino-ecu-logger - Arduino-based OBD2 engine monitor and data logger.

Espressif Systems (ESP8266, ESP32)

  • ESP32-Arduino-CAN - Arduino CAN-Bus library for ESP32.
  • ESP32_CAN_Interface - Wireless CAN-Interface for the ESP32 which uses the cannelloni protocol to send CAN-Frames via UDP over an Wi-Fi tunnel.
  • esp32_canbus_gateway - CAN module on esp32 + tja1050 coded on micropython.
  • esp32-cantroller - ESP32-S2-WROVER/WROOM based CANBUS controller thingy.
  • esp32-canbus-logger - CAN bus logger on uSD-card based on ESP32.
  • πŸ”ESP32_CANViewer - ESP32 based CAN interface for your webbrowser.
  • esp-idf-can2http - CANbus to http bridge using ESP32.
  • esp32-obd2-emulator - Open-source OBD-II emulator based on an ESP32 + CAN transceiver IC, controllable via WiFi through a simple web UI (or via API).
  • ESP32RET - CAN Reverse engineering tool for ESP32 based boards (unmaintained).
  • ESP32S3RET - CAN Reverse engineering tool for ESP32-S3 based boards.
  • esp32_obd2 - Simplified OBD2 layer to run on top of the esp32_can library that supports the newer ESP32-S3 (Arduino library).
  • ESP32_OBD2_Emulator - Simple OBD2 car emulator which runs on ESP32-S3 (replies to all OBD2 requests with dummy data).
  • RejsaCAN-ESP32 - ESP32-S3 board with CAN interface.
  • RejsaCAN-ESP32-C6 - Example code that is tested and runs on the new ESP32-C6 that has TWO built in CAN controllers.
  • CAN-wizard - CAN bus sniffer on esp32/esp32-c3 + SN65HVD230. Is developed using ESP-IDF and implement serial control console.

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

Hardware related tools


Contributing

Footnotes

  1. Please follow this root-repo for lastest updates.
  2. The another awesome list ▢️ CAN ID collections ◀️ also might be useful.
  3. Also might be useful this curated list of awesome tools and resources for LIN bus reverse engineering, LIN hardware development and debugging.