HTTP CONNECT トンネル内での WHOIS クエリ
許可された HTTP CONNECT 経路が TCP の問い合わせをポート 43 へ運ぶとき、プロキシのハンドシェイクと WHOIS リクエストを別々のやり取りとして追います。
必要な照会が今も従来の WHOIS を使っている場合、プロキシのポリシーが WHOIS サービスへの CONNECT を許可していれば、HTTP プロキシがその TCP のやり取りを運べます。クライアントは照会テキストを送る前にプロキシのハンドシェイクを完了しなければなりません。プロキシ資格情報を設定していない状態で許可された公開 WHOIS の試験には、HTTP プロキシ一覧が候補となる仲介者を提供します。そのうちの一つが WHOIS サービスのホストとポート 43 を許可していることを別途確認してください。
whois.example という名前の仮想的なサービスでは、次の HTTP リクエストから始めます。
CONNECT whois.example:43 HTTP/1.1
Host: whois.example:43
HTTP の行末は CRLF で書きます。終端の空のヘッダー行を含めてプロキシ応答を最後まで読み、数値の成功ステータスを確認します。ステータス行の一部を受け取っただけでは、次のプロトコルを開始するのに十分ではありません。
次に WHOIS テキストを送る
トンネルが開いたら、その WHOIS サーバーが期待する問い合わせを送ります。単純な例は次のとおりです。
example.com<CRLF>
この記号は復帰と改行のバイトを表します。ドメイン名の一部ではありません。この WHOIS のやり取りの中に HTTP GET 行も HTTP 応答ステータスもありません。
WHOIS サーバーが接続を閉じるまでテキストを読みます。応答は多数の行を含むことがあり、最初の改行は完了を意味しません。実装では接続と読み取りの待ち時間を有限に保ってください。
この順序はパーサーに二つの異なる境界も与えます。まず HTTP ヘッダーブロックが来ます。その後に WHOIS 応答が来て、その完了は接続の閉鎖によって示されます。解析済みの境界を越えてバッファーに残ったバイトは、ネットワーク読み取り全体を捨てるのではなく保持してください。
プロキシに拒否されればトンネルは開いていないので、その後にドメインを送っても WHOIS の結果は得られません。サーバーの応答が別の WHOIS サービスを指す場合、後続の問い合わせにはそのサービスへの独自の許可された接続が必要です。