UNIX MAGAZINE 2004年1月号

キーフレーズ

http:// UNIX Windows HTTP メール ファイル ネットワーク INTERFACE インターフェイス Linux MAGAZINE www iptables サーバー Web start コマンド 2004 クライアント () ファイアウォール ページ 場合 mbc EXTERNAL self fetchmail Samba nonce オプション Zaurus 処理 zebra システム 対応 VPN http 表示 DMZ ノード アクセス Red Hat Linux int 指定 list ディレクトリ 利用 接続 res USB etc データ req 設定 実行 000 relaytcp content count read mail インターネット TCP インストール PPTP 機能 アドレス X MAGAZINE ADSL 必要 for target return 設疋 hostname FORWARD conf デーモン recordfh Zebra create ISBN 本体価格 Content forward CPU ルータ LAN INTERNAL ヘッダ プログラム co.jp ソフトウェア nofork struct ユーザー state テンプレート procmail ホスト

目次

連載 / Pe 日活用のヒント て実装するか、 Net::Relay::HTTP のサプクラスとして の拡張モジュールを Net::ReIay::TCP のサプクラスとし は -http オプションを付けるかどうかではなく、 relaytcp のアクセスをシミュレートする場合である。ただし、これ Web プラウザが同一の LAN 上にある状態で、遠距離から 工をしたい場合が考えられる。たとえば、 Web サーバーと そのほか、 HTTP を中継する際に TCP 通信レベルの細 表示されるまでの時間が短い。 たびに逐次データを中継するので、ページの最初の部分が 方、—http オプションなしの場合はデータが送られてくる ページの最初の部分が表示されるまでに時間がかかる。 てを読み込んでから Web プラウザにデータを送るので、 を見る場合、 -http オプション付きだと relaytcp がすべ さらに、 web プラウザでデータサイズの大きいページ に高速なら目立って遅くなることはないのだが・ 幅に増えるのが最大の要因である。ディスク I/O が十分 られる。 -http オプション付きだと記録ファイルの数が大 に使うと、処理が目立って遅くなる場合があることが挙げ 別の要因として、 -http と -record オプションを同時 ことがなく、将来的にも正しく動作する可能性がより高い。 なる TCP 通信の中継なので HTTP の機能に左右される リスト 1 HTTP. pm 今回は、タイトルこそ前回までと違って、、 relayhttp" だ ☆ 実装するかの選択の問題である。 2 3 5 7 8 9 10 11 12 13 14 15 16 17 18 19 # (c) 2003 Morgan Stan1ey Dean Witter and Co. . /LICENSE for terms of distribution. # See package Net : :Re1ay: :HTTP; use our use our strict ; @ISA = qw(Net: :Re1ay: :TCP) ; Net : :Re1ay: :TCP qw(BLOCKSIZE my-open) ; %OPT_SPEC subcount = > [ ) S ' recordtcp = > ロ , ) NUMBER ' ] , constant DEF_SUBCOUNTINIT = > ' 00 ' ・ UNIX MAGAZINE 2004. 1 が、このプログラムは実際には relaytcp そのものといっ てもよく、じつに 4 回にわたって同じプログラムを説明し てきたことになる。 次回は、 POP (Post Office Protocol) を IMAP (ln- ternet Message Access Protocol) に変換するプログラ ム p 叩 2imap を紹介する予定である。 pop2imap を使 えば、 POP しか喋れないメール・ソフトウェアで IMAP しか喋れないメールサーバーにアクセスできる。そのよう な状況は稀だと思うので実用性には乏しいかもしれないが、 すくなくとも POP と IMAP の両方を同時に学ぶ題材に はなるだろう。こちらはさすがに relaytcp をもとに実装 しているわけではなく、まったく別のプログラムである。 ( いまづ・ひでよモルガン・スタンレー証券 ) 87

連載 / Pe 日活用のヒント HTTPHostHack.pm を参考にすれば比較的容易におこ Net: :Relay: :HTTP をもとにした relaytcp の拡張は、 されるすべてのデータに適用されている。 TCPHTTPHostHack.pm では、これらの処理が中継 ドだけに適用される。 また、 Cookie の処理がヘッダの Set-Cookie フィール ・ HTML または JavaScript であるデータ本体全体 HTTP 対応の改善の余地 なえるだろう。 86 のヘッダに Content-Length フィールドがあるので、そ HTTP. pm はこのような状況に対応していない。応答 なる。 の、、 GET" を、、 HEAD" に置き換えると HEAD 要求に だけを送るように要求するもので、 GET 要求の先頭行 体が送られてこない ( 図 9 ) 。 HEAD 要求は応答ヘッダ ンドで HEAD 要求を送ってみると、たしかにデータ本 (MUST NOT) と規定されている。実際に telnet コマ 要求に対する応答には、データ本体があってはならない HTTP の規格によれば、 HTTP 要求のなかの HEAD HEAD 要求に対する応答 会がないので対応していない。 のところ deflate で圧縮された HTTP 応答を処理する機 は de Ⅱ ate の伸張もできるようである。しかし、私はいま press : : Z ⅱ b モジュールを使っているが、このモジュールで 対応させてもよい。 relaytcp では gzip の伸張に Com- deflate を除外すれば対処できる。あるいは、 deflate に れは、 Accept-Encoding フィールドの値を書き換えて 一方、 HTTP. pm は deflate には対応していない。こ Accept—Encoding: gzip, deflate には以下のフィールドが含まれる。 これらの Web プラウザが発行する HTTP 要求のヘッダ 縮方式として gzip だけでなく deflate にも対応しており、 たとえば lnternet ExpIorer や MoziIIa は、データ圧 Content-Encoding 地がある。 HTTP. pm の HTTP の処理には以下の点で改善の余 図 9 telnet コマンドで HEAD 要求を送信した例 % telnet www. 3. org 80 Trying 18.29.1.34. Connected tO w. 3 . org. Escape character IS HEAD / HTTP/1.1 host : www. w3. org ェイ丁 HTTP/I . 1 200 OK Date: Sun, 09 Nov 2003 14 : 33 : 27 GMT Server : Apache/1.3.28 (Unix) PHP/4.2.3 Content—Location: Overview . htm1 Vary: negotiate,accept TCN: choice P3P: policyref="http: //www. w3 . org/2001/05/疇、 P3P/p3p. xml " Cache—ControI : max—age=600 Expires : Sun, 09 NOV 2003 14 : 43 : 27 GMT Last—Modified: Fri , 07 Nov 2003 19 : 24 : 56 GMT ETag: "3fabf188; 3e2eee38" Accept—Ranges : bytes Content-Length : 22090 Content—Type : text/html ; charset=utf—8 ェイ丁 のバイト数を読み込もうとしてしまう。 relay-nofork は要求に対する応答をつねに把握できる ので、対応させることは難しくない。一方、 forward では要 求と応を別のプロセスで処理しているので対応は難しい。 -http なしの HTTP の中継 -http オプションが導入されたので、 HTTP を中継す る際はつねにこのオプションを付けたほうがよいのかとい うと、そうではない場合も考えられる。 その要因として、まず—http オプションが HTTP に 完全に対応していないことが挙げられる。 HTTP の処理 のコードは私自身が数年にわたり使ってきたものだが、必 要に迫られて目的を達成できる範囲で実装しただけである。 実装する際には HTTP の規格を参照しているが、規格全 体を見渡し、 Web プラウザや Web サーバーの実装状況を 調べてから -http オプションの仕様を決めたわけではな い。したがって、前節で述べた既知の問題点があるし、実 装している機能にも不完全な部分があるかもしれない。ま た、今後おこなわれる HTTP の拡張により、 -http オプ ションで不具合が生じるようになるかもしれない。 一方、 -http オプションなしで relaytcp を使えば、たん UNIX MAGAZINE 2004. 1

SC 翡 好評発売中 ! プログラミング テクニック 連載 / Pe 日活用のヒント は意味がない。そこで、 TCP. prn の relay-nofork を 呼び出す際に、、 nofilter = 〉 1 " を指定し、フィルタを適 用しないようにしている。 もちろん、 TCP. pm の relay-nofork は、これらの引 数に対応するように前回の時点から変更されている。 324 行目 do { relay-nofork でも forward と同様に、 HTTP 応答に ついては状態コードが 1 以外で始まるものがくるまで繰 り返し読み込む。 forward でこのようにしているのは記 録ファイルの名前を要求と応答とで一致させるためで、 そうしなくても処理が滞ることはない。しかし、 relay- nofork ではこうしないと処理が滞ってしまう。 HTTPHostHack.pm relaytcp に—http と—httphosthack オプションの 両方を指定すると、 —class Net: :ReIay: :HTTPHost- Hack " を指定したのと同じになる。その際に使用される HTTPHostHack.pm を、末尾のリスト 3 に示す。 14 行目 our %OPT-SPEC = %Net::ReIay::* HTTP::OPT-SPEC; HTTP. pm 特有のコマンド行オプションを HTTP- HostHack. pm でも使えるようにするため、 14 行目で HTTP. pm の %OPT-SPEC を HTTPHostHack. pm の %OPT-SPEC にコピーしている。 req-filter メソッド 基本的には、 TCPHTTPHostHack.pm の req-filter と同じである。違いは、ヘッダの各フィールドおよびデー タ本体全体に文字列置換を適用していることである。 gzip 圧縮と塊工ンコーディングは伸張 / デコードされたうえで フィルタメソッドに渡され、ヘッダの Content-Length フィールドは適宜調整されるので、確実なフィルタ処理が おこなわれる。 res filter メソッド これも、基本的には TCPHTTPHostHack.pm の res- filter と同じである。違いの 1 つは、文字列置換が以下に 適用されることである。 ・ヘッダの各フィールド る み ド法 グクト : ・多治見寿和著 ・ B5 判、 240 ペーシ ・ ISBN 4-7561-4389- X ・ 1 , 800 円 + 税 生きたプログラムから学ぶ 実践的手法の数々 フリーの UNIX やアプリケーションのソース コードを見ながら、プログラミングにおけ る " 名匠の技 " を学ばうというのが本書の 目的です。長い年月をかけ、多くの人の手 ですこしすっ改良されてきたソフトウェア は洗練の度合いを増し、名匠の手になる工 芸品といった趣があります。そこには、プ ログラム開発に必要な技術がどっさりと盛 ( 本書より ) り込まれています。 目次から ソースコードから学ぶ◆データ構造◆ 2 重リンクリ スト◆木構造◆ AVL 木◆ハッシュ◆端末の操作◆端 末の制御◆ cat コマンド s コマンド◆ファイルの ロック◆パスワード・ファイル◆ワンタイム・バスワ ード◆公開鍵暗号◆ Secu 「 e S ⅱ e Ⅱ◆構文の解析◆ yacc ◆ lex ◆ ping ◆ telnet ◆ ftp ◆ inetd ◆ xst 「◆ cmp と cksum ◆ man ◆フィ丿レタコマンド (UNIX MAGAZINE 1997 年 1 1 月号 ~ 2000 年 3 月号より ) 株式会社アスキー 〒 1 60 ー 8584 東京都新宿区信濃町 34 J 日信濃町ビル 出版営業部電話 (03) 5362 ー 8300 85 UNIX MAGAZINE 2004. 1