{"id":20585398,"url":"https://github.com/aibor/exceed2go","last_synced_at":"2025-04-14T21:09:07.863Z","repository":{"id":141892064,"uuid":"532520931","full_name":"aibor/exceed2go","owner":"aibor","description":"ICMPv6 time exceeded packet generator","archived":false,"fork":false,"pushed_at":"2025-04-14T17:32:19.000Z","size":1287,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-14T21:08:46.203Z","etag":null,"topics":["ebpf","go","golang","network","xdp"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aibor.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-04T11:33:34.000Z","updated_at":"2025-04-14T17:32:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"9d9f7fe3-2b54-43fb-b21f-189de232b24c","html_url":"https://github.com/aibor/exceed2go","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aibor%2Fexceed2go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aibor%2Fexceed2go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aibor%2Fexceed2go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aibor%2Fexceed2go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aibor","download_url":"https://codeload.github.com/aibor/exceed2go/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248961237,"owners_count":21189993,"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","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":["ebpf","go","golang","network","xdp"],"created_at":"2024-11-16T07:07:55.049Z","updated_at":"2025-04-14T21:09:07.800Z","avatar_url":"https://github.com/aibor.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2024 Tobias Böhm \u003ccode@aibor.de\u003e\n\nSPDX-License-Identifier: AGPL-3.0-or-later\n--\u003e\n\n# exceed2go\n\nExceed2go is an eBPF based ICMPv6 time-exceeded packet generator. It attaches \nan eBPF program to a given interface and replies to packets matching the\nconfigured address with ICMPv6 time-exceeded messages. By default, an XDP\nprogram is used. With Linux 6.6 or newer also a tc program (using TCX) can be \nused.\n\nIt's inspired by this news post about someone distributing their CV by\ntraceroute: https://news.ycombinator.com/item?id=32609588\n\nSee it in action by running traceroute or mtr to at `exceed2go.aibor.de`.\n\n## Usage:\n\nYou need to be able to set DNS PTR (rDNS) records for address in a IPv6 subnet\nyou control, e.g. if your server has an IPv6 subnet you probably can set\nreverse DNS entries for addresses.\n\nThen load `exceed2go` for those addresses:\n\n```\n# exceed2go load --iface eth0 2001:db8::5 2001:db8::aa 2001:db8::dd 2001:db8::ee 2001:db8::ff\n```\n\nor a bit more convenient with the help of bash expansion:\n\n```\n# exceed2go load --iface eth0 2001:db8::{5,aa,dd,ee,ff}\n```\n\n`eth0` is the name of the interface to attach the eBPF program to. So it should\nbe the interface the packets reach your server at. Additional interfaces can\nbe given by using the flag repeatedly or specify the interfaces as \ncomma-separated list.\n\nThe last address (2001:db8::ff in the example) is the target address to run\na traceroute to.\n\nAll additional addresses are the hops to be replied as in the order they should\nappear in the traceroute.\n\nSo with the above values the traceroute will look like this:\n\n```\n(... hops before your host)\n11:  start.here (2001:db8::5)\n12:  three.more (2001:db8::aa)\n13:  two.more (2001:db8::dd)\n14:  one.more (2001:db8::ee)\n15:  the.end (2001:db8::ff)\n```\n\nTo unload the program run the cleanup command:\n\n```\n# exceed2go cleanup\n```\n\n## Troubleshooting\n\nIn case the program didn't exit correctly the XDP program might be still\nattached. It can be easily detached with:\n\n```\nip link set dev eth0 xdp off\n```\n\nIf the traceroute doesn't work you can check the eBPF maps the program uses:\n\nFor the list off configured addresses (key 0 is the target address):\n```\nbpftool map dump name exceeded_addrs\n```\n\nFor the packet counters: \n```\nbpftool map dump name exceeded_counters\n```\n\nSee `bpf/exceeded2go.c` for the counter keys and where the packets are counted.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faibor%2Fexceed2go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faibor%2Fexceed2go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faibor%2Fexceed2go/lists"}