iTraceroute: Traceroute with Concurrency and IP-to-AS ResolutionZheng Zhang, DSNL, Purdue |
![]() |
![]() |
iTraceroute is a new implementation of traceroute. It is designed for probing a lot of destinations simultaneously. iTraceroute has the following features.
./iTraceroute -M PrefixToAS.map -c 1 google.com. The output is,
128.46.101.46:56482->74.125.45.100:33000 tcp_ack !R finish_time= 1234379973 0 128.46.101.1 [0.559 ms] {17} 1 172.19.124.1 [0.402 ms] {0} 2 192.31.0.10 [0.379 ms] {0} 3 192.31.0.14 [0.414 ms] {0} 4 172.28.250.9 [0.402 ms] {0} 5 192.5.40.179 [1.557 ms] {0} 6 * [ ] { } 7 149.165.254.23 [30.533 ms] {19782} 8 64.57.28.7 [34.464 ms] {11537} 9 64.57.28.10 [38.246 ms] {11537} 10 64.57.29.21 [53.037 ms] {11537} 11 216.239.49.217 [35.589 ms] {15169} 12 66.249.94.235 [40.372 ms] {15169} 13 66.249.95.127 [40.254 ms] {15169} 14 72.14.238.136 [55.68 ms] {15169} 15 209.85.254.241 [55.819 ms] {15169} 16 209.85.253.133 [56.074 ms] {15169} 17 74.125.45.100 [56.261 ms] {15169} !R. Let me explain the meaning of the output. In the first line,
128.46.101.46:56482->74.125.45.100:33000
shows you
the source and destination IP and port.
tcp_ack
means we send tcp packet to
probe. Next, !R
indicates the reason why traceroute stops
-- the destination is reached and TCP RST (R represents RST) packet is
received. Finally finish_time= 1234379973
records the
finish time of the execution
in unix time
format. Subsequent lines show the hops traced along the path. For
example, in line 8 64.57.28.7 [34.464 ms] {11537}
,
64.57.28.7
is the hop IP, 34.464 ms
is the
RTT, and 11537
is the AS number.
./iTraceroute -p 3 -F list.txt. Option
-p 3
specifies that the number of concurrent
threads is 3. The destinations are given by the
file list.txt
whose content is for example,
120.50.224.1 120.72.0.1 202.180.192.1 61.114.64.16 61.114.64.4. The output is here.
./iTraceroute -M PrefixToAS.map -c 1 -A 15169 google.com. The output is,
128.46.101.46:52274->209.85.171.100:33000 tcp_ack enter-AS finish_time= 1234553055 0 128.46.101.1 [0.246 ms] {17} 1 172.19.124.1 [0.325 ms] {0} 2 172.28.252.21 [0.36 ms] {0} 3 172.28.252.2 [0.395 ms] {0} 4 172.28.250.9 [0.367 ms] {0} 5 192.5.40.179 [1.502 ms] {0} 6 * [ ] { } 7 149.165.254.23 [227.342 ms] {19782} 8 64.57.28.7 [40.112 ms] {11537} 9 64.57.28.10 [37.071 ms] {11537} 10 64.57.29.21 [35.667 ms] {11537} 11 209.85.255.68 [35.599 ms] {15169}
Why not use execute multiple traditional traceroute processes to achieve concurrency?
Because multi-processing consumes more resources than multi-threading. 100 traceroute processes raise CPU usage to around 50% on my machine. High system resource usage is a problem if you perform measurement on PlanetLab.
How does iTraceroute resolve IP into AS?
iTraceroute uses BGP routing tables to resolve IP into AS. The owner AS of an IP address is the origin AS of the smallest covering IP prefix in the routing tables. The BGP routing tables are collected from Route Views.