{"id":17297718,"url":"https://github.com/rhelmke/cant","last_synced_at":"2025-07-22T14:33:49.391Z","repository":{"id":53600683,"uuid":"231917552","full_name":"rhelmke/cant","owner":"rhelmke","description":"On-the-fly manipulation of CAN/ISOBUS frames, for science!","archived":false,"fork":false,"pushed_at":"2020-01-05T13:09:21.000Z","size":121,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-14T12:47:15.892Z","etag":null,"topics":["area","can","cant","car","controller","cryptocan","golang","isobus","mitm","network","osnabrueck","privacy","proxy","sciency","security","server","tractor","university","vehicle"],"latest_commit_sha":null,"homepage":"http://sys.cs.uos.de/cant/index.shtml","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rhelmke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-05T12:57:09.000Z","updated_at":"2023-08-17T17:22:09.000Z","dependencies_parsed_at":"2022-09-12T00:50:55.404Z","dependency_job_id":null,"html_url":"https://github.com/rhelmke/cant","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rhelmke/cant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhelmke%2Fcant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhelmke%2Fcant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhelmke%2Fcant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhelmke%2Fcant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rhelmke","download_url":"https://codeload.github.com/rhelmke/cant/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhelmke%2Fcant/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266510673,"owners_count":23940693,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["area","can","cant","car","controller","cryptocan","golang","isobus","mitm","network","osnabrueck","privacy","proxy","sciency","security","server","tractor","university","vehicle"],"created_at":"2024-10-15T11:16:53.184Z","updated_at":"2025-07-22T14:33:49.362Z","avatar_url":"https://github.com/rhelmke.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CAN't\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/rhelmke/cant)](https://goreportcard.com/report/github.com/rhelmke/cant)\n\n**CAN't** is a multithreaded privacy proxy server for [ISO-11898](https://www.iso.org/standard/63648.html) Controller Area Networks that is mainly targeted at [ISOBUS](https://www.iso.org/standard/57556.html) applications.\nIts purpose is to selectively block, perturbate, or round privacy sensitive data transmitted via CAN. The software can easily be configured using an HTML5 web interface.\nImplementation details and the motivation behind this project can be found in:\n\n*J. Bauer, R. Helmke, A. Bothe, and N. Aschenbruck, “CAN’t track us: Adaptable Privacy for ISOBUS Controller Area Networks”, Elsevier Computer Standards and Interfaces, 2019.*\n\nConcept, implementation, and evaluation were topic of a bachelor's thesis at the [Distributed Systems Group](https://sys.cs.uos.de/), University of Osnabrück:\n\n*R. Helmke, “Konzeptionierung und Implementierung eines Proxys für erhöhten Datenschutz in Controller Area Networks“,\n2018, supervised by: Prof. Dr. Nils Aschenbruck, Prof. Dr. Michael Brinkmeier.*\n\n## Dependencies\n\n* `GOOS=linux GOARCH=amd64`\n* Golang (`\u003e=1.13`)\n* go-bindata (`go get -u github.com/jteeuwen/go-bindata/...`)\n* MariaDB (`apt install mysql-server`)\n* npm/yarn\n* [SocketCAN](https://www.mjmwired.net/kernel/Documentation/networking/can.txt)\n* Packages: See `go.mod`\n\n## Build\n\nMake sure your `CXX` and `CC` variables are properly set:\n\n```bash\nexport CXX=clang++ # or whatever you fancy\nexport CC=clang # or whatever you fancy\n```\n\nThen build the project:\n\n```bash\ngit clone --recursive https://github.com/rhelmke/cant.git\ncd cant\ngo generate # execute yarn and go-bindata to generate the webinterface\ngo build cant\n```\n\n## General Synopsis\n\n```plain\nUsage:\n  cant [command]\n\nAvailable Commands:\n  help        Help about any command\n  run         run the main components\n  seed        Seed the database\n  setup       Interactive cant setup\n  version     Print version\n\nFlags:\n  -h, --help   help for cant\n\nUse \"cant [command] --help\" for more information about a command.\n```\n\n```plain\nUsage:\n  cant run [command]\n\nAvailable Commands:\n  proxy       run the proxy component\n\nFlags:\n  -h, --help   help for run\n\nUse \"cant run [command] --help\" for more information about a command.\n```\n\n## Manual Setup\n\n### Database\n\n```bash\napt install mysql-server # install mariadb on debian or ubuntu\nmysql -uroot -p # login to mariadb and create empty database + user\nmysql\u003e create database cant;\nmysql\u003e create user 'cant'@'localhost' identified by '\u003cPASSWORD\u003e';\nmysql\u003e grant all privileges on cant.* to 'cant'@'localhost';\nmysql\u003e exit\n```\n\n### CAN Interface\n\n**CAN't** needs two interfaces in order to work as man-in-the-middle between ECUs.\nFor testing purposes, you might want to create two virtual interfaces. To do so, add following lines `/etc/network/interfaces`:\n\n```bash\nauto vcan0\niface vcan0 inet manual\n    bitrate 250000 # ISOBUS uses a nominal bitrate of 250kbit/s\n    pre-up /sbin/ip link add dev $IFACE type vcan\n    post-up /sbin/ip link set $IFACE txqueuelen 1000\n\nauto vcan1\niface vcan1 inet manual\n    bitrate 250000 # ISOBUS uses a nominal bitrate of 250kbit/s\n    pre-up /sbin/ip link add dev $IFACE type vcan\n    post-up /sbin/ip link set $IFACE txqueuelen 1000\n```\n\nAlso, be sure that you loaded all needed kernel modules:\n\n```bash\nmodprobe can\nmodprobe vcan\n```\n\nYou can then execute `ifup vcan0` or `ifup vcan1` to bring the interfaces up.\nYou can read and write data using the `can-utils` package from your OS's repositories.\n\n### Seeding\n\n1. Make sure you did everything explained in Section \"Database\" and \"CAN Interfaces\".\n2. `./cant setup`, this will guide you through a cli-based installation routine. You need a properly functioning MariaDB containing an empty database for **CAN't**.\n3. `./cant seed -f \u003cpgn and spn data\u003e.csv -t spnpgn`, this will seed the database with all known PGN's and SPN's.\n4. `./cant seed -t filter`, this will inject all implemented and compiled filters into the database.\n\n## Where to get SPN and PGN Data\n\nThe [VDMA](https://www.isobus.net/isobus/) maintains a growing list of known PGN's and SPN's. Please use the [csv-formatted database dump](https://www.isobus.net/isobus/attachments/isoExport_csv.zip) and extract `SPNs and PGNs.csv`. This file can be used to seed the database during setup.\n\n## Run the proxy\n\n```bash\n./cant run proxy\n```\n\nThe proxy will expose its webinterface to a port (default: `8080`) configured during setup.\n\n## [IMPORTANT] Security\n\n**This software is considered as proof of concept.**\n\n*As this project originated from a bachelor's thesis with CAN privacy as its main topic, neither encryption nor secure API-Endpoints have been developed and planned as future work. At this point, it is highly discouraged to use the proxy in production or expose it to the internet.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhelmke%2Fcant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhelmke%2Fcant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhelmke%2Fcant/lists"}