はじめに
- traceroute コマンドに関する小ネタです
- ルーティング経路の調査には traceroute コマンドがよく使用されますが、これを ping コマンドで代替してみます
- ネットワーク調査ツールの理解に役立つのではないかと思います
traceroute コマンドの基本的な仕組み
- traceroute コマンドは、まずターゲットのアドレスに対して TTL=1 の UDP パケットを送信します
- もし TTL exceeded が返ってきたら TTL を +1 してパケットを再送します
- ターゲットアドレスに到達するまで TTL をインクリメントしながらパケットの送信を繰り返します
- TTL exceeded が返ってくるごとに到達地点の IP アドレスを記録することでターゲットアドレスへの経路を調べることが出来ます
ping コマンドでエミュレート
- traceroute コマンドの挙動を ping コマンドでエミュレートするとこんな感じになります
$ TARGET=www.example.com; MAX=64; for i in $(seq 1 ${MAX}); do echo -n " ${i} "; ping -t ${i} -c 1 ${TARGET} | grep exceeded | awk '{print $2}'; done
- Linux の iputils に含まれている ping コマンドを使用しました
- TTL は -t オプションで指定できます
- 最大 HOP 数は 64 にしました
- UDP の代わりに ICMP のパケットを送信しています
- エラー処理はしていません