Linuxゲリラ戦記

「ヤツが死んでいるのか。それともただ眠っているだけか……。俺のデコpingコマンドで調べてみよう」

左を向いているペンギンみたいなキャラクター、ナックス

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コマンド。)』!」

デビー君「ここに来てそれ!?っていうか、その話ってまだ続いてたの!?」