小学生でも分かるプロキシ講座(6)
小学生でも分かるプロキシ講座(1)前回書いたように
小学生でも分かるプロキシ講座(2)
小学生でも分かるプロキシ講座(3)
小学生でも分かるプロキシ講座(3')
小学生でも分かるプロキシ講座(4)
小学生でも分かるプロキシ講座(5)
「HTTPプロキシサーバー」とは、つまるところ「Winnyが起動しているマシン」と同種の代物です。例えば現在このウェブページを開いているクライアントマシンでWinnyを起動させている人もいるでしょう。僕の場合は現在
- InternetExplorer
- FFFTP
- MSNメッセンジャー
- ICQ
「PC同士の通信」を頭に描こうとする時、「電話による通話」ではなく「文通」をイメージすると良いと思います。例えば、今僕のマシンに何処かのIPアドレスから「手紙」が届いたとする。それは「ブラウザでリクエストしたウェブサーバーからのレスポンス」かもしれないし「メッセンジャーで誰かがオンラインになったという通知」かもしれないし「FFFTPでFTPサーバーからタイムアウトしたという通知」かもしれない。一つのマシン上で同時起動しているソフトが一つであれば問題ない。一つであれば、届いた「手紙」は全て「そのソフト宛の手紙」です。そのソフトがその手紙を解釈できないなら、その手紙は「ゴミ」です。しかし現実にはそんなことはない訳で、一つのマシン上では同時に複数のソフトが起動している。
・・・ということで生まれたのが「ポート」という概念です。割とよく使われる気がする表現ですが、IPアドレスは住所であり、その住所が示すアパートの部屋番号が「ポート番号」。一つのアパート(一台のマシン)の中には複数の部屋(複数のソフト)があり、部屋番号(ポート番号)によって「どの部屋(ソフト)宛の手紙か」が識別される。
と、いうような「ポート番号に関する超初歩的知識」のみを持っている人の中には、以下のような誤解を持っている人もいると思います。
HTTPプロキシサーバー(ソフト)はポート8080。だから、ウェブサーバーは「自分に送られたリクエストの差出元ポート番号」をチェックし、それが8080であったら「串経由だ」という判断を行えば良い。
論より証拠、ということでCyberSyndromさんとかで適当な串を探してここを開いてみて下さい。例えば僕は今とある串をさして開いたところ
あなた(orあなたが設定しているプロキシ)がtokix.netとの接続に使用しているポートは 2109 です。と言われました。ちなみに生の場合は
あなた(orあなたが設定しているプロキシ)がtokix.netとの接続に使用しているポートは 2453 です。だそうです。
ポート8080で公開されているプロキシを使ったところで、ウェブサーバーへのアクセスポートが8080になる訳ではない。
上記の場合だったら
クライアントのポート2453→プロキシサーバーのポート8080という具合にリクエストが転送された。「プロキシサーバーソフト」という一つのソフトがポート8080と2109を「リクエスト受付用」「受けたリクエスト転送用」に使い分けてる訳です。
プロキシサーバーのポート2109→ウェブサーバーのポート80
ウェブサーバーは、自分にリクエストを送ってきたマシンのポート番号から「それがプロキシか否か」を判断することは出来ない。ならば。
「IPアドレスを知っている」のに「それがプロキシであるということを知らない」という事態があり得るのか?「あるIPアドレスのあるポートが開いているか否か」というのは簡単に調べることが出来ます。「ポートスキャン」って単語聞いたことがあると思うんですが、アレはつまり「開いているポートを探す」ということです。
それは「IPアドレスを元に、そのマシンでWinnyが起動しているかいないかを調べることはできるか?」という問いに似ている。
通常、プロキシサーバーソフトは「リクエスト受付」にポート8080を使用します。つまり、「ポート8080が開いているマシン」とは「プロキシサーバーソフトが起動しているマシン」であり、「プロキシサーバーソフトが起動しているマシン」から送られるリクエストの多くは「中継されたリクエスト」です。・・・厳密なことを言えば、「プロキシサーバーソフトが起動しているマシン」から送られるリクエストは必ずしも「中継されたリクエスト」ではない。例えば僕がプロキシサーバーソフトを走らせていたとして、「僕自身が自分でブラウザから送ったリクエスト」と「プロキシサーバーソフトによって中継された、他人からのリクエスト」をウェブサーバーが判別することは出来ないからです。ただ、まぁ、「ポート8080が開いているマシンからのリクエストは(それが相手自身のモノであれ中継であれ)問答無用に弾く」ということは出来る。
※しかし、全てのプロキシサーバーソフトが「待ち受け」にポート8080を使用する訳ではない。例えば、ネットサーフィン中に以下のようなURLを見たことがあると思うんですが、
2chは「リクエスト内の余分な書き換え分を探す」等といった通常の「串弾き」に加え、上記のような方法の串弾きを行っています。つまり、「2chに書き込める串」が欲しいと思うならば、最低限ポート8080を開いていないプロキシサーバー(=ポート8080以外でプロキシサーバーソフトを走らせているマシン)を探さなくてはいけません。
http://www.server.net:1080/この「:」以降(=1080)は相手のポート番号を表します。
通常、HTTPサーバーソフトはポート80で「リクエスト」を待機します。普通にブラウザのアドレス欄に「http://www.server.net/」と打って「移動」を押した場合は
- www.server.netの
- ポート80
通常、HTTPサーバーはポート80で「リクエスト」を待機するため、ブラウザは「ポート番号が指定されない場合はポート80にリクエストを送信する」という仕様になっている訳です。しかしこの世にはポート80以外で公開されるウェブサーバーソフトもある(というか「ポート80以外で公開するように設定している管理人もいる」)ため、そういう場合にはURLを「http://www.server.net:1080/」とすることで
- www.server.netの
- ポート1080
プロキシサーバーに関しても話は同じで、必ずしも全てのプロキシがポート8080を「待ち受け」に使用する訳ではない。前回使った例で言えば、Winnyは(旧バージョンでは)「デフォルトポート番号7743」であるため、「ポート7743が開いているマシン=Winnyが起動しているマシン」という判断は可能だが、待ち受けポート番号設定をユーザーが変更しているならば
IPアドレスを元に、そのマシンでWinnyが起動しているかいないかを調べることは出来ない。IPアドレスを元に、そのマシンで(ポート8080以外で)プロキシサーバーソフトが走っているか否かを判断することは出来ない。
・・・以上が「プロキシ」というモノを理解した上で使用するために必要となってくる知識でした。「串」というモノが結局のところ何なのか、少しでも「得るモノ」を提供できていれば光栄です。

TrackBack
この記事へのトラックバック