目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

telnetでHTTPリクエストを送ってみよう。

1日1アウトプットを心がける

正直コレは役に立つか分からないネタ知識的な気がします。単にリクエストを送るならもっとモダンなやり方があるはず。

とりあえず、インストール。

構成によるかも知れないのですが、最小構成でインストールした際はtelnetコマンドが無いのでインストール。

sudo aptitude update && sudo aptitude safe-upgrade && sudo aptitude install -y telnet

送ってみる

コマンド形式は、以下の形式です。

telnet <ホスト> <port番号>

telnetで接続するするとサーバが応答待ちの状態になるので、以下のように入力してあげます。
1行目はHTTPリクエスト行。2行目からメッセージヘッダとなります。最低限Hostを指定しないとだいたいのサーバはBadRequestを返してきます。メッセージヘッダの終了を表すために空の行を含めることを忘れずに。

HEAD / HTTP/1.1
Host: www.google.co.jp

上記のリクエストを送った結果が以下になります。

masasuzu@lenny% telnet google.co.jp 80
Trying 72.14.203.104...
Connected to google.co.jp.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: www.google.co.jp

HTTP/1.1 200 OK
Date: Sat, 05 Feb 2011 05:54:00 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
Set-Cookie: PREF=ID=b5f8dc2e4f1032fa:FF=0:TM=1296885240:LM=1296885240:S=zh1x1wrDNqySDQ8P; expires=Mon, 04-Feb-2013 05:54:00 GMT; path=/; domain=.google.co.jp
Set-Cookie: NID=43=q425g0gazPJFqGsQsxiWpoY5kC_244zg0CnJV4t_vsbE3O7x-4GXcOLzXqtmKc_MfQu4JsM0viGAI5Y6QxgkzmBvXEhNBS_nB_MBhqdAWrTTSKhMmwJ78ppclNblivPz; expires=Sun, 07-Aug-2011 05:54:00 GMT; path=/; domain=.google.co.jp; HttpOnly
Server: gws
X-XSS-Protection: 1; mode=block
Transfer-Encoding: chunked

それnetcatでもできるよ。

netcatでやるとこんな感じでしょうか。ヒアドキュメントが使えるところが少し便利かな。netcatは自分もあまり使いこなしていないのでもっと勉強したいところ。

masasuzu@lenny% nc google.co.jp 80 << !
heredoc> HEAD / HTTP/1.1
heredoc> Host: www.google.co.jp
heredoc> 
heredoc> !
HTTP/1.1 200 OK
Date: Sat, 05 Feb 2011 06:01:21 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
Set-Cookie: PREF=ID=e5723380a52a3332:FF=0:TM=1296885681:LM=1296885681:S=dlqjmo-AX4M7cqeG; expires=Mon, 04-Feb-2013 06:01:21 GMT; path=/; domain=.google.co.jp
Set-Cookie: NID=43=LI6RBHSmAyuGgIUkQAZ3gv4ZUU11IXIe5dLpAo07t4GkI1OJRtxK79Fxj4mx37vcyn_ucEOSUKlCy7mt8aixIEw5EuTQCcYYN7t2WYBM-KO2u3gkazbqCO2GaoHhsuB7; expires=Sun, 07-Aug-2011 06:01:21 GMT; path=/; domain=.google.co.jp; HttpOnly
Server: gws
X-XSS-Protection: 1; mode=block
Transfer-Encoding: chunked

参考?