traceroute コマンドとは、 TTL を増やしながら送る ICMP パケットなので、 ping コマンドが使えれば再現可能。
問題
Android 端末でのネットワークトラブルシューティングのために adb shell をしながら curl したり ping を試していたけど、 traceroute が無いことに気づいた。
root を取れば traceroute コマンドを入れることも可能だけど、会社の検証端末なので root は取りたくない (というかポリシー的にダメそう) 。
解決方法
TTL を増やしながら送る ICMP パケットなので、 ping コマンドが使えれば再現可能。
ping コマンドの ttl を指定するオプションは環境によってかなり違うようなので man なり help なりを読んでみてください。 Android では -t
でしたが、 Mac では -m
でした。
Android で試してみた
$ for i in `seq 1 54`; do ping -t $i -c 1 www.google.com | grep rom; sleep 1; done From 192.168.100.1: icmp_seq=1 Time to live exceeded From flets-nte-poi3.edit.ne.jp (218.219.145.6): icmp_seq=1 Time to live exceeded From flets-gw-poi3.edit.ne.jp (218.219.145.5): icmp_seq=1 Time to live exceeded From 218.219.145.37: icmp_seq=1 Time to live exceeded From 202.17.189.121: icmp_seq=1 Time to live exceeded From 202.17.189.61: icmp_seq=1 Time to live exceeded From as15169.ix.jpix.ad.jp (210.171.224.96): icmp_seq=1 Time to live exceeded From 108.170.242.161: icmp_seq=1 Time to live exceeded From 66.249.95.89: icmp_seq=1 Time to live exceeded 64 bytes from nrt20s02-in-f4.1e100.net (172.217.26.4): icmp_seq=1 ttl=55 time=25.1 ms 64 bytes from nrt20s02-in-f4.1e100.net (172.217.26.4): icmp_seq=1 ttl=55 time=23.9 ms 64 bytes from nrt20s02-in-f4.1e100.net (172.217.26.4): icmp_seq=1 ttl=55 time=23.5 ms
Mac で試してみた
$ for i in `seq 1 54`; do ping -m $i -c 1 -t 1 www.google.com | grep rom; done 36 bytes from 192.168.100.1: Time to live exceeded 36 bytes from flets-nte-poi3.edit.ne.jp (218.219.145.6): Time to live exceeded 36 bytes from flets-gw-poi3.edit.ne.jp (218.219.145.5): Time to live exceeded 36 bytes from 218.219.145.37: Time to live exceeded 36 bytes from 202.17.189.121: Time to live exceeded 36 bytes from 202.17.189.61: Time to live exceeded 36 bytes from as15169.ix.jpix.ad.jp (210.171.224.96): Time to live exceeded 76 bytes from 108.170.242.129: Time to live exceeded 92 bytes from 108.170.236.5: Time to live exceeded 64 bytes from 172.217.27.68: icmp_seq=0 ttl=55 time=10.746 ms 64 bytes from 172.217.27.68: icmp_seq=0 ttl=55 time=4.149 ms 64 bytes from 172.217.27.68: icmp_seq=0 ttl=55 time=4.149 ms
Mac で検算してみた
$ traceroute www.google.com traceroute to www.google.com (172.217.27.68), 64 hops max, 52 byte packets 1 192.168.100.1 (192.168.100.1) 1.903 ms 2.308 ms 1.193 ms 2 flets-nte-poi3.edit.ne.jp (218.219.145.6) 4.379 ms 3.693 ms 4.483 ms 3 flets-gw-poi3.edit.ne.jp (218.219.145.5) 4.969 ms 4.604 ms 5.210 ms 4 218.219.145.37 (218.219.145.37) 5.696 ms 4.900 ms 4.650 ms 5 202.17.189.121 (202.17.189.121) 4.710 ms 4.347 ms 5.061 ms 6 202.17.189.61 (202.17.189.61) 4.747 ms 4.849 ms 4.570 ms 7 as15169.ix.jpix.ad.jp (210.171.224.96) 4.879 ms 4.685 ms 8.653 ms 8 108.170.242.97 (108.170.242.97) 4.891 ms 108.170.242.129 (108.170.242.129) 6.192 ms 4.975 ms 9 108.170.236.5 (108.170.236.5) 5.277 ms 108.170.236.7 (108.170.236.7) 4.860 ms 108.170.236.5 (108.170.236.5) 4.219 ms 10 nrt12s15-in-f68.1e100.net (172.217.27.68) 3.942 ms 5.195 ms 5.049 ms
まとめ
Android と Mac で到達しているホストが異なるので若干経路に違いはあるけど、 Mac の再現と検算では経路が同じだったので traceroute 再現という目的は達成できてそう。