A tool that allows pinging / trace route) all known ASes in one run.
MultiPing provides several tools:
Download Assignments
for downloading a list of known ISD/AS assignmentPing All
for sending a single traceroute to all known ASes along the shortest path (default behaviour)Ping Repeat
for repeatedly probing (traceroute) multiple paths to multiple ASes.Ping Responder
for responding to incoming echo requests.
All tools can be run from the executable jar file which is available in the GitHub Releases section. It can be executed with: https://github.com/netsec-ethz/scion-java-multiping/releases/download/v0.2.0/scion-multiping-0.2.0.jar
java -jar scion-multiping-0.2.0-executable.jar [tool-command]
Some tools require configuration files, see below in the tool description sections.
See also the troubleshooting section below in case of issues.
The tool
parses Anapayas ISD/AS assignment website
and writes the result to a local file isd-as-assignments.csv
.
Note: the isd-as-assignments.csv
output file can be directly used as input file for the PingRepeat
The tool parses Anapayas ISD/AS assignment website, identifies the shortest path to each AS and sends a traceroute to each AS. It reports the number of paths to each AS as well as the shortest path with latency, remote IP, hop count and remote IP.
It also provides a summary of its findings.
The tool reads a list if ISD/AS codes from a csv file (
isdAsInputFile
, example), repeatedly sends
traceroute
SCMP requests to each AS and writes the results to an output file (
outputFile
, example).
SCMP request are sent in several rounds, each round consisting of several attempts. In the default configuration (see below) it will:
- execute 144 rounds (
roundRepeatCnt
) - start a new round every 600s = 10 minutes (
roundDelaySec
) - in each round, select the 20 shortest paths (
maxPathsPerDestination
) for each AS - in each round, execute 5 "attempts" (
attemptRepeatCnt
) - in each "attempt", send a single traceroute request along every selected path to every AS,
then wait 100ms (
attemptDelayMs
) before executing the next attempt
144 rounds á 10 minutes results in a total runtime of about 24h.
The tool uses a configuration file ping-repeat-config.json
(example)
that can contain the following
arguments:
{
"attemptRepeatCnt": 5,
"attemptDelayMs": 100,
"roundRepeatCnt": 144,
"roundDelaySec": 600,
"maxPathsPerDestination": 20,
"tryICMP": false,
"isdAsInputFile": "ping-repeat-destinations.csv",
"outputFile": "ping-repeat-output.csv",
"localPort": 30041,
"consoleOutput": true
}
The input file is a csv file with ISD/AS, label and IP (optional). The ISD/AS can optionally be
enclosed in "
.
When an IP is given then the tool will execute an echo
request to the IP, otherwise it will
execute a traceroute
request to the border router of the destination
AS. Example:
64-2:0:9,"ETH Zurich (ETHZ)"
"64-2:0:4c","AWS PoC Anapaya",192.168.0.1
This will result in a traceroute
request to th ETH border router of 64-2:0:9
and a echo
request to 64-2:0:4c,192.168.0.1
.
THe tool can be executed with:
java -jar scion-multiping-0.2.0-executable.jar ping-repeat
The output file is a csv file with one row per round/path. Each row consists of:
- ISD/AS
- Remote IP (if known)
- Time stamp
- Type: can be ECHO or TRACE
- Result: can be SUCCESS, NO_PATH (no path found to destination), LOCAL_AS (the destination AS is the local AS) or ERROR
- Hop count of the path taken
- The path
- millisecond latency for each attempt (default: 5)
For example, this shows measurements for three paths to 64-0:0:ce7
:
64-0:0:ce7,193.247.172.126,2024-09-13T15:46:04.044713600Z,SUCCESS,2,[2>6 19>9],14.54,14.38,13.86,13.23,14.86
64-0:0:ce7,193.247.170.170,2024-09-13T15:46:04.045213500Z,SUCCESS,2,[1>5 17>1],10.4,10.3,9.79,9.91,10.76
64-0:0:ce7,193.247.170.170,2024-09-13T15:46:04.045213500Z,SUCCESS,2,[2>6 17>1],10.7,10.3,9.98,9.86,10.75
This shows a LOCAL_AS and a NO_PATH event:
64-2:0:9,,2024-09-13T15:46:05.979346700Z,LOCAL_AS,0,[]
71-2:0:4a,,2024-09-13T15:46:16.554705200Z,NO_PATH,0,[]
The PingResponder
can be configured with a configuration file ping-responder-config.json
, it has
two options:
{
"localPort": 30041,
"consoleOutput": true
}
This happens, for example, on Windows when using a VPN. One solution is to execute the jar with the
following property (
the example works only for ethz.ch
):
java -Dorg.scion.dnsSearchDomains=ethz.ch. -jar scion-multiping-0.2.0-executable.jar