Show HN: An async traceroute(1) implementation in Rust (github.com)
I wrote a minimal traceroute(1) clone that leans on asynchrony to reduce the time spent tracing a route. Underneath, it uses ICMP to do its job. The plan is to add support for UDP tracing and a path maximum transmission unit discovery mechanism.
Comments and suggestions are welcome!
4 comments
[ 2.5 ms ] story [ 20.2 ms ] threadAside from this, please correct me if I'm wrong, but it is my understanding that if a router along the path is configured to drop ICMP Echo Request packets, it will drop them in any case - whether we trace from the beginning or in reverse.
I'd be totally satisfied if it just accepted a TTL to count down from, but you can do a lot better than counting down from 255.
You can usually infer how many hops away something is from the TTL by assuming it was originally the nearest power of 2. Failing that, you can use binary search to identify the distance pretty quickly.
None of this is foolproof by any means, each packet could take a different route, but it seems to work fine.
Of course, if you do include this feature and people start to use it, they'll probably just improve the fingerprint, so maybe it's self defeating anyway.