■ 実際に行ってみる ■
前回はスリーウェイ・ハンドシェイクが行われる時に、稼動し
ていないサービスにSYNデータが届いた場合について説明し
ました。
稼動していないサービスに対してSYNデータが届いた場合、
OSはRST(リセット)というデータをクライアントに送信
し、「そんなサービス動いてませんよ。」と教えてあげるので
した。
今回はスリーウェイ・ハンドシェイクが正常に完了する場合と
完了しない場合とを実際に行ってみましょう。
それでは早速ですが、Windowsを御使用の方はコマンドプロン
プトを起動させてください。
Linux等UNIX系OSを御使用の方はシェルを起動させてください。
まずスリーウェイ・ハンドシェイクに失敗する例を行ってみま
しょう。
以下の様にコマンドを入力してみて下さい。
telnet www.yahoo.co.jp 123
このコマンドを投入するとtelnetというプログラムが起動しま
す。
telnetとはホストにリモートログインし、遠隔操作ができる仮
想端末機能を提供するプログラムですが、ポートNo.を指定
する事により任意のポートに対して接続を試みる事も出来ます。
コマンドの説明は以下の通りです。
telnet www.yahoo.co.jp 123
~~~~~~~~~~~~~~~ ~~~
↑ ↑
サーバー名 ポートNo.
サーバー名の所はIPアドレスを指定しても構いません。
telnetというプログラムは起動後すぐに指定されたポートに対
してスリーウェイ・ハンドシェイクを試みます。
上記の様にポートNo.123を指定した場合、NTP(Network
Time Protocol)というネットワーク上で時刻情報を取得するサ
ービスにスリーウェイ・ハンドシェイクを試みます。
Yahoo!はNTPサービスは提供していませんので、スリーウェイ・
ハンドシェイクに失敗します。
スリーウェイ・ハンドシェイクに失敗した場合、「接続できま
せんでした。」という意味のメッセージが表示されると思いま
す。
環境によっては上記コマンド入力後、しばらく時間がかかる方
もいらっしゃるかと思いますが、我慢して待ってみましょう。
以下に失敗した場合の例を示します。
Trying www.yahoo.co.jp
telnet: Unable to connect to remote host: Connection refused
上の例はあくまでも1つの例です。
必ず上記の様に表示されるわけではなく、環境によりさまざま
だと思いますが、とにかく「接続できませんでした。」という
意味のメッセージが表示されると思います。
それでは次にスリーウェイ・ハンドシェイクに成功する例を行
ってみましょう。
以下の様に入力してください。
telnet www.yahoo.co.jp 80
~~~~~~~~~~~~~~~ ~~
↑ ↑
サーバー名 ポートNo.
ポートNo.の所に80を指定しました。
ポートNo.80はHTTP(HyperText Transfer Protocol)のサービス
を行うポートです。
皆さんご存知の様にYahoo!はWEBページを閲覧するサービスで
あるHTTPを提供しています。
上記の様にコマンドを入力するとスリーウェイ・ハンドシェイ
クに成功し、先程の失敗例の様に「接続できませんでした。」
等というメッセージも表示されないと思います。
(上記のコマンドでも接続に失敗するという方は、上位のサー
バーにより接続が禁止されている可能性がありますので、ネッ
トワーク管理者に聞いてみてください。)
「接続できませんでした。」という意味のメッセージが表示さ
れなくなったという方は、スリーウェイ・ハンドシェイクに成
功した事になります。
しかし画面には何も表示されないと思います。
これはHTTPの仕様なのですが、接続しただけではサーバーは何
も言ってきてはくれません。
せっかくスリーウェイ・ハンドシェイクが成功したので、HTTP
を少しだけ行ってみましょう。
以下の様に大文字で入力してください。
HEAD / HTTP/1.0
ただし1文字でも間違うとtelnetを起動する所からやり直しに
なるのでご注意ください。(バックスペースキーや、デリート
キーも使用する事は出来ません。)
また環境によってはキーボードを押しても画面に何も表示され
ない方もいらっしゃると思います。
そういう方も、サーバーにデータは送られていますので、構わ
ず1文字ずつ正確に入力してみてください。
リターンキーを押すとYahoo!のHTTPサーバーから応答が返って
くるはずです。
以下にその一部分を示します。
─↓ここから──────────────────────
HTTP/1.1 200 OK
Date: Sun, 18 May 2003 13:04:02 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO
DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi
STA POL HEA PRE GOV"
Cache-Control: private
Pragma: no-cache
Connection: close
Content-Type: text/html;charset=euc-jp
<html>
<head>
<title>Yahoo! JAPAN</title>
<!--居・>
<STYLE TYPE="text/css">
.spacer { line-height: 115%; }
</STYLE>
・
・
・
・
─↑ここまで──────────────────────
ご存知の方もいらっしゃるかと思いますが、これはHTML(Hyper
Text Markup Language)です。
インターネットエクスプローラやネットスケープ等のソフトウ
ェアはHTMLを成型してWEBページを綺麗に表示してくれますが、
telnetは成型して表示する処理は行ってくれません。
テキストだけでのやり取りですが、今行った文字列のやり取り
はインターネットエクスプローラ等のWEBブラウザでも全く同
じ事が行われているという事を覚えておきましょう。
また、先ほどの「HEAD / HTTP/1.0」という文字列を入力する
時に、キーを押し間違えた方の場合、上記の様な文字列とは異
なる文字列がサーバーから返ってきます。
その文字列を良く見ると、
HTTP/1.1 400 Bad Request
と書かれてあると思います。
これは、文字列はサーバーまで届いてはいるのですが、キー入
力を間違えた為にサーバーが要求を認識する事が出来ず、エラ
ーを返してきているという事になります。
インターネットエクスプローラ等でも存在しないページを表示
しようとすると、よく「Bad Request」等と表示される事があ
りますが、ご覧になった方もいらっしゃるのではないでしょう
か。
HTTPのエラーについてはこちらが詳しいです。
ダイヤモンド・アプリコット電話研究所
RFC2068・HTTPエラーコード表・一覧
>>>
http://www.nda.co.jp/memo/RFC2068.html
これでとりあえずスリーウェイ・ハンドシェイクが正常に行わ
れ、サーバーとの通信が行える事がお分かり頂けたかと思いま
す。
ところで、今まで説明してきたスリーウェイ・ハンドシェイク
ですが、これをサーバーに対して行なうと、サーバーにはログ
が残ります。
つまりサーバー管理者はログを調べる事により、何時何分何秒
にIPアドレスこれこれの人からアクセスを受けた、という事
を知る事が出来るのです。
スリーウェイ・ハンドシェイクを短時間に複数のポートに対し
て行うと、サーバー管理者は「これはポートスキャンを受けて
いるな。」と気付く事が出来ます。
これによりサーバー管理者は、特定のIPアドレスからのアク
セスを警戒したり、アクセス自体を拒否する設定にする事も出
来ます。
しかし、サーバー管理者に気付かれる事無くポートスキャンを
行なう方法もあります。
どんな方法なのでしょうか?
続きは次回に。