{"id":20314899,"url":"https://github.com/catchpoint/pietrasanta-traceroute","last_synced_at":"2026-02-16T08:33:41.082Z","repository":{"id":169414593,"uuid":"564855065","full_name":"catchpoint/Pietrasanta-traceroute","owner":"catchpoint","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-04T16:40:04.000Z","size":4359,"stargazers_count":59,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-05T01:53:12.714Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catchpoint.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-11T16:56:18.000Z","updated_at":"2025-11-27T21:10:42.000Z","dependencies_parsed_at":"2023-11-16T16:45:32.549Z","dependency_job_id":"abe0fd99-ae79-4bcd-a837-049981ff4ae2","html_url":"https://github.com/catchpoint/Pietrasanta-traceroute","commit_stats":null,"previous_names":["catchpoint/networking.traceroute"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/catchpoint/Pietrasanta-traceroute","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catchpoint%2FPietrasanta-traceroute","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catchpoint%2FPietrasanta-traceroute/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catchpoint%2FPietrasanta-traceroute/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catchpoint%2FPietrasanta-traceroute/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catchpoint","download_url":"https://codeload.github.com/catchpoint/Pietrasanta-traceroute/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catchpoint%2FPietrasanta-traceroute/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29503809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T08:14:25.707Z","status":"ssl_error","status_checked_at":"2026-02-16T08:14:25.334Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-11-14T18:17:08.085Z","updated_at":"2026-02-16T08:33:41.066Z","avatar_url":"https://github.com/catchpoint.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catchpoint's Pietrasanta traceroute\n\n## Introduction\n\nThis is an enhanced version of Dmitry Butskoy traceroute developed by Catchpoint.  \n\nTraceroute is one of the oldest network diagnostic tools. It was first built to answer \nthe thorny question, where are the packets going? However, various challenges introduced \nby firewalls and load balancers have made the original traceroute less useful and \nreliable than it once was.\n\nWe did a number of improvements to Dmitry's work.  The main ones are enumerated here:\n* Support for \"TCP InSession\" method. This method opens a TCP connection with\nthe destination and sends TCP probes within the opened session with incremental\nTTL. The aim is to prevent false packet loss introduced by firewall and\nrouter configurations related to security and to ensures that packets follow a\nsingle flow, akin to a normal TCP session, to bypass load-balanced routers.\n - Introduced enhanced TOS (DSCP/ECN) field report. This new option allows to set \nToS field in outgoing packets and read the ToS field of the expiring probes. It\nincludes a special output to highlight DSCP and ECN values.\n- Introduced the QUIC module to perform QUIC traceroute using --quic. This mode\nuses QUIC Initial packets as probes.\n \nFull details in ChangeLog [here](ChangeLog). \n\nFollowing the convention of naming traceroute after the place where they are developed,\nwe named our traceroute after the tiny town where the Catchpoint Italian branch is based: \nPietrasanta traceroute.\n\nHappy (Pietrasanta) tracerouting!\n\n## Building \u0026 Installation\n```\nmake \nmake install\n```\n\n### OpenSSL 3 dependency\n\nSince version 0.1.3 (the version that introduced QUIC support), openssl3 (version \u003e= 3.2) is needed to compile\ntraceroute. If openssl3 libraries are not available, you can still build and enjoy traceroute by disabling\nQUIC by passing the argument `DISABLE_OPENSSL=1` to `make`. \n\nAt compile time openssl3 header files are searched by default in `/usr/local/include` \nbut the path can be changed via the `LIBSSL3_CFLAGS` argument. \nAt linking time and runtime openssl3 libraries are searched in\n`/usr/local/lib64` but the path can be changed via the `LIBSSL3_LDFLAGS` argument.\n\nA way to obtain openssl3 libraries is to compile them  from source.\nAs an example these are the steps to get shared objects in `/usr/local/lib64` and\nheader files in `/usr/local/include`:\n\n```\ngit clone -b openssl-3.2 https://github.com/openssl/openssl.git\ncd openssl\n./Configure\nmake\nmake install\n```\n\n## Binaries\n\nThis tool should build and run on any Linux system running a kernel version 2.6 or higher. This includes systems running on containers, VMs and on the Windows Subsystem for Linux (WSL).\n\nSince version 0.1.14 this tool should also work on MacOS, with the known limitations that TCP and TCP InSession mode are not yet available and Path MTU discovery is not supported for any mode.\n\nBinaries are provided for convenience [here](binaries) for common Linux distributions and they can be directly used into the target system.\n\nA way to use the provided binaries is the following:\n\n* Download the binary from `https://raw.githubusercontent.com/catchpoint/Networking.traceroute/main/binaries/\u003cdistro\u003e/traceroute`\n* Provide executable permission (e.g. `chmod +x \u003cbinary\u003e`)\n* Optionally provide `cap_net_raw` capability to make it run without the need of being root for privileged commands (e.g. like traceroute TCP), via `sudo setcap cap_net_raw+ep \u003cbinary\u003e`.\n* Ensure that openssl3 libraries are available in the system. For example for ubuntu 22.04 they should be installed by default. See `OpenSSL 3 dependency` section for more information about that.\n\n### Building with docker\n\nThe binaries provided in the `binaries` folder are obtained compiling the tool on OS-dedicated dockerfiles.\nFor convenience these dockerfiles are included into the `dockerfiles` folder and a build (bash) script called `build.sh` is provided.\nTo obtain binaries with QUIC enabled, a folder containing `openssl3` source code is requested in input to the build script.\nTypically this will be a branch of the official OpenSSL github repositorty containing an openssl 3.2+ version.\nIf no folder is provided, traceroute binaries with QUIC disabled will be produced (like passing `DISABLE_OPENSSL=1` to `make`).\nThe script places the binaries into the [binaries] folder for the given platform(s).\n\nThe build script takes these options:\n\n* `--build`: build the binaries.\n* `--clean`: clean docker images and containers created during the build process.\n* `--platform=\"\u003cspace separated list of platforms\u003e\"`: build and/or clean for the specified list of platforms. Accepted platforms values are: `centos7` (CentOS 7), `debian 11` (Debian 11), `ubuntu22` (Ubuntu 22) and `alpine3.15` (Alpine 3.15). By default they are all enabled.\n* `--openssl3=\u003copenssl3_folder\u003e`: The folder containing openssl3 source code.\n\nThe build script requires GNU [getopt](https://linux.die.net/man/1/getopt) (which is available by default on Linux).\n\nExample:\n\n```\n./build.sh - --build --clean --openssl3=/home/user/openssl3\n```\n\nThis will produce the binaries for CentOS 7, Debian 11, Ubuntu 22, Alpine 3.15, and place them into the `binaries` folder.\n\n## Usage\n\nSee [traceroute(8)](traceroute/traceroute.8) for detailed instructions.\n\n## Original Dmitry Butskoy README file\n\nThis is a new modern implementation of the traceroute(8)\nutility for Linux systems.\n\nTraceroute tracks the route packets taken from an IP network on their\nway to a given host. It utilizes the IP protocol's time to live (TTL)\nfield and attempts to elicit an ICMP TIME_EXCEEDED response from each\ngateway along the path to the host.\n\nMain features:\n- Full support for both IPv4 and IPv6 protocols\n- Several tracerouting methods, including:\n  * UDP datagrams (including udplite and udp to particlular port)\n  * ICMP ECHO packets (including dgram icmp sockets)\n  * TCP SYNs (in general, any TCP request with various flags and options)\n  * DCCP Request packets\n  * Generic IP datagrams\n- UDP methods do not require root privileges\n- Ability to send several probe packets at a time\n- Ability to compute a proper time to wait for each probe\n- perform AS path lookups for returned addresses\n- show ICMP extensions, including MPLS\n- perform path MTU discovery automatically\n- show guessed number of hops in backward direction\n- command line compatible with the original traceroute\n- and much more, see traceroute(8)\n\nThis code was written from the scratch, using some ideas of\nOlaf Kirch's traceroute, the original implementation of Van Jacobson\n(which was long used before) and some current BSD's ones.\n\nThis traceroute requires Linux kernel 2.6 and higher.\n\nYou can try to contact the author at \u003cDmitry at Butskoy dot name\u003e .\n\n\nGood tracerouting!\n\nDmitry Butskoy\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatchpoint%2Fpietrasanta-traceroute","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatchpoint%2Fpietrasanta-traceroute","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatchpoint%2Fpietrasanta-traceroute/lists"}