35.ネットワークをちょっと知る。pingったりtracerouteったり
ナックス「はい。というわけで今日は『私たち一般人はウェブサイトの情報をどこまで探れるのか』を軽ーく紹介致します」
デビー君「はーい」
ナックス「まず簡単な所では、前回教えたwhoisコマンドでyahooのアドレスの情報はこんな感じで調べられます」
$ whois yahoo.co.jp
ナックス「結果はこんな感じ」
$ whois yahoo.co.jp [ JPRS database provides information on network administration. Its use is ] [ restricted to network administration purposes. For further information, ] [ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ] [ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ] Domain Information: [ドメイン情報] a. [ドメイン名] YAHOO.CO.JP e. [そしきめい] やふーかぶしきがいしゃ f. [組織名] ヤフー株式会社 g. [Organization] Yahoo Japan Corporation k. [組織種別] 株式会社 l. [Organization Type] Corporation m. [登録担当者] SI7100JP n. [技術連絡担当者] IT018JP p. [ネームサーバ] dnsg01.yahoo.co.jp p. [ネームサーバ] ns04.ops.ogk.yahoo.co.jp [状態] Connected (2010/11/30) [登録年月日] 2000/11/17 [接続年月日] 2000/11/17 [最終更新] 2009/12/01 01:10:18 (JST) $
デビー君「おぉ。本当だ」
ナックス「さて、今度はウェブサーバーのIPアドレスを調べてみよう」
デビー君「え!ウェブサイトの管理人のIPアドレスが調べられるの?」
ナックス「いや、正確にはそうではありません。飽くまでも『ウェブサーバー』のIPアドレスです」
ナックス「基本的にウェブサイトを作っている人のほとんどは、自分のパソコンからウェブサイトを公開しているのではなく、レンタルサーバーという『ウェブサイトを公開するためのサービスを提供しているサーバー』を借りて、そこからウェブサイトを公開しています。なので、ほとんどの場合はそのレンタルサーバーのIPアドレスが分かるだけです」
ナックス「が、中にはもちろん自分のパソコンからウェブサーバーを立ち上げている人もいますので、そう言う場合はその人のパソコンのIPアドレスが分かるという認識でよいでしょう」
ナックス「で。アドレスからそのIPをさぐるならpingコマンドを使ってみましょう」
$ ping アドレス
ナックス「例えばこんな感じで使います」
$ ping www.yahoo.co.jp
ナックス「結果はこんな感じです」
$ ping www.yahoo.co.jp PING www.ya.gl.yahoo.co.jp (124.83.147.204) 56(84) bytes of data. 64 bytes from f4.top.vip.ogk.yahoo.co.jp (124.83.147.204): icmp_seq=1 ttl=47 time=19.8 ms 64 bytes from f4.top.vip.ogk.yahoo.co.jp (124.83.147.204): icmp_seq=2 ttl=47 time=13.9 ms 64 bytes from f4.top.vip.ogk.yahoo.co.jp (124.83.147.204): icmp_seq=3 ttl=47 time=14.2 ms
ナックス「これを見ると、Yahooのウェブサーバーのアドレスは124.83.147.204だなーってことが分かります」
デビー君「いやいや、ちょっと待ってナックス。このコマンド止め方が分からない」
ナックス「このコマンドはCtrlキーを押しながらCキーを押して止めるというのがメジャーな止め方という、珍しいコマンドです」
デビー君「Ctrlキーを押しながらCキーって、シェルスクリプトで無限ループを作っちゃったときに強制終了させるのと同じ方法だね」
ナックス「そうです。Ctrlキーを押しながらCキーはCUI環境ではバシバシ使うので、きちんと覚えておいてね」
ナックス「さて。もう一回www.yahoo.co.jpのIPアドレスを調べてみてください」
デビー君「え?もう一回?」
$ ping www.yahoo.co.jp PING www.ya.gl.yahoo.co.jp (203.216.227.176) 56(84) bytes of data. 64 bytes from f1.top.vip.tnz.yahoo.co.jp (203.216.227.176): icmp_seq=1 ttl=53 time=6.01 ms 64 bytes from f1.top.vip.tnz.yahoo.co.jp (203.216.227.176): icmp_seq=2 ttl=53 time=6.58 ms 64 bytes from f1.top.vip.tnz.yahoo.co.jp (203.216.227.176): icmp_seq=3 ttl=53 time=4.87 ms 64 bytes from f1.top.vip.tnz.yahoo.co.jp (203.216.227.176): icmp_seq=4 ttl=53 time=5.58 ms 64 bytes from f1.top.vip.tnz.yahoo.co.jp (203.216.227.176): icmp_seq=5 ttl=53 time=8.31 ms
デビー君「あれ?さっきとIPアドレスが変わってる!」
ナックス「Yahooほどの大きなサイトになると、一つのウェブサーバーでは対処しきれず、一つのドメインに複数のウェブサーバーを使って対処してるんだなーっていうのがこれで分かります」
デビー君「なるほど。そういうことか」
デビー君「ところでナックス。pingコマンドの結果を見ると、このコマンドは純粋にIPアドレスを調べるためのコマンドでは無さそうだけど?」
ナックス「はい。このコマンドは本来は、特定のホスト(アドレス)に対してネットワークがきちんと接続されているかを確認するためのコマンドです。例えば皆さんの身近な例で言うと、いつも行っているお気に入りのサイトが突然消えた。そのサイトにpingコマンドを実行して……」
- 応答が返ってきた……サーバーは生きている。管理人さんがデータを消したのかな?
- 応答が返ってこない……サーバーが停止してる。管理人さんがウェブサイトを削除したんじゃなくて、レンタルサーバー側の方で何かトラブルがあったな
ナックス「みたいな感じですね」
ナックス「ちなみに一番右のtimeはpingで『いまどんな状態?』と聞いて『こんな状態だよー』とウェブサーバーが結果を返すまでの時間です。単位はms(ミリセカンド)。1ミリセカンドは1000分の1秒です」
デビー君「なるほど」
ナックス「さて、『ウェブサイトにもレンタルサーバーにも全く問題は無く、実は自分が契約しているプロバイダーの方で問題があってネットが全く見れない状態だった』何てこともあるかもしれません」
デビー君「げ。そんな時はどうするの?プロバイダーのドメインにpingコマンドをするの?僕、プロバイダーのドメインなんて知らないよ?」
ナックス「そんな時はtracerouteコマンドを打ちましょう」
$ traceroute リモートホスト名(アドレス)
ナックス「例えば以下の様に使います」
$ traceroute www.yahoo.co.jp
ナックス「結果は以下のようになります」
$ traceroute www.yahoo.co.jp traceroute to www.yahoo.co.jp (203.216.243.218), 30 hops max, 40 byte packets 1 ntt.setup (192.168.1.1) 0.159 ms 0.161 ms 0.260 ms 2 ●●●●.●●●●●●●●.●●.so-net.ne.jp (123.123.123.123) 2.883 ms 2.889 ms 2.882 ms 3 ●●●●.●●●●●●●●.●●.so-net.ne.jp (456.456.456.456) 2.900 ms 3.204 ms 3.202 ms 4 ●●●●.●●●●●●●●.●●.so-net.ne.jp (789.789.789.789) 3.783 ms 4.042 ms 4.025 ms 5 ●●●●.●●●●●●●●.●●.so-net.ne.jp (012.012.012.012) 4.551 ms 5.328 ms 5.324 ms 6 ●●●●.●●●●●●●●.●●.so-net.ne.jp (345.345.345.345) 5.345 ms 4.063 ms 4.052 ms 7 202.213.193.153 (202.213.193.153) 4.634 ms 7.960 ms 7.929 ms 8 202.213.193.242 (202.213.193.242) 7.947 ms 4.547 ms 4.408 ms 9 202.213.198.62 (202.213.198.62) 4.635 ms 4.517 ms 4.487 ms 10 202.93.74.229 (202.93.74.229) 4.871 ms 4.874 ms 4.984 ms 11 203.216.238.202 (203.216.238.202) 6.930 ms 6.448 ms 6.447 ms 12 203.216.238.202 (203.216.238.202) 6.884 ms !X * 5.118 ms !X
ナックス「ちなみにこちらのコマンドはpingコマンドと違って、待っていれば勝手に止まります」
デビー君「これはどういうコマンドなの?」
ナックス「これはそのドメインにたどり着くまでのネットワークの経路です。どうやら今回はYahooの203.216.238.202のウェブサーバーまで行ったようです。これがその経路」
ナックス「つまり、そこに行く途中でそれ以上tracerouteコマンドが動かなくなってしまったら、その部分に原因があるということになります」
デビー君「上の方にso-netがいっぱいあるのは……」
ナックス「私がso-netユーザーなので、so-net関係のなんやかんやをネットワークが通っていることが分かります。ちなみに、ここら辺のIPアドレスは念のためにいじりました」
デビー君「so-netがプロバイダだからso-netのネットワークを通るのは分かるけど、その下のIPアドレスは?」
ナックス「どこかの誰かのルーターなどを通ったのでしょう」
デビー君「???」
ナックス「え?どこか分からない箇所がありました?どこですか?」
デビー君「so-netを通った後は、直接Yahooのウェブサーバーに行けばいいのに、なんでどこかの誰かのルーターなんかをネットワークが通るの?」
ナックス「あー。なるほど……。実は、インターネットは電波などで一気にウェブサーバーまで情報を取りにいくことは出来ません」
デビー君「え?そうなの?だって、無線LANの技術とか、発達してるって聞いたよ?」
ナックス「インターネットの基本は有線、つまり、何らかのコードでつながれていることが前提です。無線LANだと、通信の品質が落ちますし、飛ばしているデータがハッカーに盗まれ放題です」
ナックス「かといって、プロバイダーが全世界の全てのウェブサーバーに一つ一つケーブルをつなげるのも莫大な費用がかかってしまい、あまり賢い方法ではありません」
ナックス「そこで出てくるのが、ルーターです」
デビー君「パソコンと電話線の間にある変なやつだね」
ナックス「それです。各家庭のルーターは実は皆さんが思っているよりちょっと賢く、お互いにネットワークの通り道を融通しあっています。つまり、どこかの誰かさんが、勝手にあなたのルーターを通って、どこかのサイトを見ていたりします」
デビー君「げ。なんか嫌だな……」
ナックス「そして、そんなデビー君も、どこかの誰かのルーターを勝手に通ってウェブサーバーまでネットワークのルートを確立してサイトを見ているのです。これこそ助け合いの精神」
デビー君「えーっと、じゃあ、どこかの誰かのルーターが壊れてたら、僕はずっとYahooのサイトを見れないの?」
ナックス「いいえ。もう一度tracerouteコマンドを打ってみてください」
$ traceroute -m 35 www.yahoo.co.jp traceroute to www.yahoo.co.jp (203.216.235.154), 35 hops max, 40 byte packets 1 ntt.setup (192.168.1.1) 0.553 ms 0.545 ms 0.550 ms 2 ●●●●.●●●●●●●●.●●.so-net.ne.jp (123.123.123.123) 2.883 ms 2.889 ms 2.882 ms 3 ●●●●.●●●●●●●●.●●.so-net.ne.jp (456.456.456.456) 2.900 ms 3.204 ms 3.202 ms 4 ●●●●.●●●●●●●●.●●.so-net.ne.jp (789.789.789.789) 3.783 ms 4.042 ms 4.025 ms 5 ●●●●.●●●●●●●●.●●.so-net.ne.jp (012.012.012.012) 4.551 ms 5.328 ms 5.324 ms 6 ●●●●.●●●●●●●●.●●.so-net.ne.jp (345.345.345.345) 5.345 ms 4.063 ms 4.052 ms 7 202.213.193.249 (202.213.193.249) 3.799 ms 3.742 ms 3.893 ms 8 202.213.193.246 (202.213.193.246) 4.580 ms 4.728 ms 4.039 ms 9 202.213.198.62 (202.213.198.62) 4.267 ms 4.267 ms 4.327 ms 10 202.93.74.229 (202.93.74.229) 4.694 ms 4.689 ms 4.832 ms 11 203.216.238.202 (203.216.238.202) 5.557 ms 5.560 ms 5.789 ms 12 * * 203.216.238.202 (203.216.238.202) 4.703 ms !X
デビー君「あれ?さっきと経路が違う?」
ナックス「ネットワークの世界にはこんな言葉があります。『結果(終着点)が同じなら、通り道なんてどこ通っても構わねぇ!!』」
デビー君「そ、そんな適当でいいの?」
ナックス「そんな適当で良いのです。事実、それでネットの世界は動いています」
ナックス「誤解されないように言っておくと、ルーターはそれぞれお互いに『そこに行きたいの?じゃあ、こっちのルート通れよ』とか『こっちのルートは今、ネットワーク負荷が高いから、こっちに行った方が早くつくぜ』と教えあっています」
デビー君「へー。ルーターって地味だけど、結構頑張ってるなぁ……」
ナックス「そうです。なので、通り道の一つのルーターが壊れていたからと言って『あー。あいつ今死んでるから、こっちから行きな』と優しいルーターが教えてくれるので大丈夫。道は幾千通りもあります」
ナックス「そうそう。ウェブサーバーのIPアドレスを知る方法が分かったので、前回のIPアドレスを使った調査とかも使えますね」
デビー君「なんだかちょっぴりハッカーに近づいた気分。そろそろ本格的にハッカーの勉強がしたいな」
ナックス「さぁ、次回からはデビー君が待ちに待っていた情報だ!」
デビー君「え?ついに、本格的なハッキングの方法の解説か……!?」
ナックス「次回!『そんなことより思春期のデビー君はエロ画像をどうやって収集するかで頭がいっぱい(36.ファイルを検索する、findコマンド、locateコマンド。何のファイルか調べる、fileコマンド。)』!」
デビー君「ここに来てそれ!?っていうか、その話ってまだ続いてたの!?」