IcmpTool

Icmp Tool provides a straight-forward way to characterize the responsiveness to TTL-limited probes of routers close to you.

The tool sends TTL-limited probes at constant rate(s) to the routers at the specified hops along the path to a given destination. By studying the timeseries of the received ICMP time-exceeded replies, it determines the responsiveness of the routers it targeted. A responsive router typically shows 3 responsiveness phases in the following order:

[fully-responsive]  [rate-limited] [irregular]

Depending on the chosen probing rates and on the configuration of the router, not all phases might appear. The most common implementation of rate limitation is with an on-off pattern, for which IcmpTool provides the parameters: burst size, period length and resulting answering rate. In some cases, rate limitation is implemented with a maximum constant answering rate, but no such pattern is observable. We call this a generically rate-limited router (rl). The irregular phase, if any, might appear whether or not rate limitation has been configured. After a certain threshold, the responsiveness of a router might simply not follow any pattern and become less predictable.

The tool uses tcpdump to capture outgoing probes and incoming replies. It requires sudo privileges.

The code is available on pypi.

It can be used both as a library and as a standalone script. For example, once you’ve installed i, you can probe the first 3 routers along the path from you to 8.8.8.8 (Google DNS server) at 5 exponentially-spaced constant probing rates between 1 pps and 500 pps by typing on a terminal:

$ ./icmp_tool.py --dest 8.8.8.8 --ttls 1 2 3 --min_rate 1 --max_rate 500 --n_of_rates 5 --duration 10

The tool is based on code we used for a large scale campaign on PlanetLab described in  Characterizing ICMP rate limitation on routers, IEEE International Conference on Communications (ICC), June 2015.