• 締切済み

プロクシ(多段プロクシ)を使う場合のソケット/HTTPプログラミングについて

プロクシ(多段プロキシ)を使う場合のソケット/HTTPプログラミングについて 教えてください。 以下のような構成になっている場合 ┌---┐ ┌-------┐ ┌--------┐ │プログ│⇒│プロクシサーバ │⇒│ターゲットサーバ │ │ラムχ│ │proxy.com:8080 │ │target.co.jp:80   │ └---┘ └------─┘ └--------┘ ソケットプログラミングでHTTPを操ろうとしたら、以下のようになると思います。 1)proxy.comのポート8080をオープンする 2)proxy.comに送信するHTTPリクエストを以下のようにする。  GET http://target.co.jp/index.html HTTP/1.1  Host: target.co.jp:80  (以下略) では、これがプロクシが一段ではなくて多段だった場合、 例えば以下のような構成の場合、どうソケットプログミングを書けばよいのでしょう? ┌---┐ ┌-------┐ ┌-------┐ ┌--------┐ │プログ│⇒│プロクシサーバ │⇒│プロクシサーバ │⇒│ターゲットサーバ│ │ラムχ│ │prxy1.com:8080 │ │prxy2.com:8080 │ │target.co.jp:80   │ └---┘ └-------┘ └-------┘ └-------─┘ HTTPとソケットプログラミングに詳しい方、ご教授ください。 記述言語の想定はCですが、特にJavaでもPerlでも構いません。 よろしくお願いします。

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

多段プロクシはDeleGateというプロクシサーバの固有の機能だったと思います。 URLを-_-でつないでいくだけです。

babubabu21c
質問者

お礼

御回答ありがとうございました。

関連するQ&A

  • ソケットプログラミングについて

    ソケットプログラミング(ネットワーク?)をはじめようと思うのですが(使用する言語はCあるいはC++) その場合のOSとして UNIX、Linux、Windows のどれが適しているでしょうか ちなみに、メールサーバや、APACHの様なHTTPサーバを作れる様にまでなりたいです (その他にもFTP等) ちなみに私はUNIXや、Linuxだと思っていますが、Windows との文法の違いはどれくらいあるのでしょうか

  • プロクシを通すべきか

    通常は、ISPから指定されたプロクシサーバを設定するべきだと思います。 ただ、私が加入しているISPのプロクシは当然であるのかもしれませんが、全く匿名性は持たせてありません。こちらのホストネームやIPアドレスをまるまる通してしまいます。 別に怪しげなWEBサイトを見るわけでもないのでこれでもかまわないのですが、丸見えな感じがしてあえて他の匿名性を持たせたプロクシを設定しています。 問題は安定して運用できるサーバがない(頻繁に変更する必要がある)ことと、速度が落ちる場合があるということです。 (設定は http://www.cybersyndrome.net/) そこで皆さんはどのように設定、運用しているかお聞かせください。 下記の質問のお答えも含めてくだされば幸いです。 ・速度や安定性を犠牲にしてまで、他のプロクシサーバを経由してWEBアクセスすることは意味があるのか。 ・むしろ得体の知れないプロクシサーバを通すことで、暗号化されていないパスワードなどがプロクシサーバの管理者に読み取られてしまわないか。

  • 掲示板でのプロクシ規制の判断基準は?

    最近のレンタル掲示板ではプロクシなどを制限することができる機能を持っている場合があります。 このプロクシ制限ですが多くの場合何を基準に制限しているのでしょうか? ユーザーエージェントもリファラでもわかるはずはないのでIPだと思うのですが、IPではWebサーバとプロクシサーバの判断はできないはずです。

  • squid で HTTP_VIA の情報を隠すには?

    会社のファイアウォール内で、3段階の Proxy サーバ(いずれも squid)を 運用しているのですが、例えば   http://www.ugtop.com/spill.shtml のようなサイトで見ると、以下のように HTTP_VIA に社内の Proxy サーバの 状況が見えてしまいます。   1.0 proxy.sub2.sub1.abc.co.jp:8080 (Squid/2.3.STABLE5),   1.0 proxy.sub1.abc.co.jp:8080 (Squid/2.3.STABLE5),   1.0 proxy.abc.co.jp:8080 (Squid/2.3.STABLE5) 一番下は対外的なサーバなのでいいとして、上の2つの情報を隠すには、 squid をどのように設定すればいいのでしょうか? それとも不可能? 例えば、1.0 unknown (Squid/2.3.STABLE5), 1.0 unknown (Squid/2.3.STABLE5) のように設定したいのですが…

  • UDPのソケットプログラミング

    ソケットプログラミングでの質問です. 初心者です. UDPクライアントで sock = socket(PF_INET,SOCK_DGRAM,0) でUDPソケットを生成した後に bind()なしで,UDPサーバ宛にsendto() を行った場合, サーバのrecvfrom()でクライアントの IPアドレスとポート番号が受け取ることができると思いますが ここでのIPアドレスはクライアントのアドレスで, ポート番号は他のクライアントの他ソケットが使用していないポート番号 が受け取ることができると考えてよろしいですか? クライアントのsendto()で自動的にポート番号が割り当てられるが, クライアントが,どのポートから送信したのかを知る方法はないですか?

  • HTTP コンテンツの要求

    UNIX環境上でC言語を用いてプログラミングしているのですが、完全に詰まってしまいました。 実現したい動作は、クライアントがサーバーにURLを送ってコンテンツを要求するという至って単純なものです。 現在実装が済んでいるのは、クライアントとサーバーがソケット通信をして、例えば以下のような文字列をクライアントからサーバーに送信できるようになりました。(ホスト名は適当) GET /index.html HTTP/1.1 Host: www.host.jp: 8080 調べたところ、サーバーにこの要求を渡せば対応するコンテンツが返ってくる、らしきことが書いてあったのですが、クライアントもサーバーも同じコンピュータ内にあり、ソケットでクライアントとサーバーを接続しただけで全く関係のない場所にあるコンテンツを取得できるとは到底思えません。 一体どうすればコンテンツを取得できるのか、全くわかりません。初歩的な質問かと思いますが、分かる方教えてください。

  • Proxyの動作について

    初歩的なことだとは思うのですが、お知恵をお貸しください。 Proxyを挟んだ場合、クライアント端末-Proxy-Webサーバ間でどのような処理の流れになるかを調べているのですが、 TCPDUMPで確認したところクライアントからのHTTPプロトコルが確認できず、クライアント端末とProxyサーバ間では3WAYハンドシェークしか行っていない様でした。 当初はクライアントからのHTTPリクエストをProxyサーバが受け、ProxyサーバがWebにさらにリクエストをし、、、という流れを行うと考えていたのですが、 実際のところとしてProxyサーバをはさんだ場合の一連の流れとしてはどのようになるのでしょうか? クライアント端末とProxyサーバは同一セグメント内に設置している構成です。 よろしくお願いします。

  • ソケットプログラミングについて

    こんにちは。 前回、質問しました「バード」という者です。 ソケットプログラミングについて質問します。 PC1から、jpegやmpegファイルを送信しPC2で受信するというプログラムをC言語で作ってみたいと思っています。 以前、少しだけJAVAプログラミングでPC1(送信側)からPC2(受信側)へデータを送信するプログラムを作ったのですが、作ったプログラムの概要を以下に示します。 [送信側] (ファイルオープン) InputStream in = new FileInputStream(ss); BufferedInputStream bin = new BufferedInputStream(in); ↓ (データを読みsendメソッドにて随時送信) while((c = bin.read(buffer, 0, buffer.length))!=-1){ dPacket = new DatagramPacket(buffer,buffer.length,iAddress,port); dSocket.send(dPacket); } ↓ (ファイルとソケットクローズ) dSocket.close(); [受信側] (ファイルオープン) OutputStream out = new FileOutputStream(args[1]); BufferedOutputStream bout = new BufferedOutputStream(out); ↓ (送信側から来たデータをreceiveメソッドにて受信) while(true){ dPacket = new DatagramPacket(buffer,buffer.length); dSocket.receive(dPacket); } ↓ (ファイルとソケットクローズ) dSocket.close(); 上記に示す様に、ファイルをオープンし、DatagramSocketとDatagramPacketクラスを用いて送受信し最後に、ファイルをクローズするという形式をとっていました。 C言語の場合でも、ファイルオープン→send関数,receive関数等を用いて送信・受信→ファイルクローズという形をとる事ができるのでしょうか?FTPプログラムやエコープログラムを、よく見かけるのですが・・・・

  • HTTP1.1のProxyServerを作りたい

    HTTP1.1のProxyServerを作りたい いきなりですが、私がこの質問をするにいたったまでの経緯を話させていただきます。その後、その経緯を踏まえたうえで何点か質問があるのですが、それは後に書きます。 現在HTTP1.1のProxyServerを、C言語でBSDソケットを使って作成しようとしています。 しかし通信がうまくいきません。自分なりにおそらくこれが原因ではないかという、あたりをつけたんですが、その原因の解決方法がわかりません。その原因とは、 レスポンスのデータの区切りがわからないせいでデータがごっちゃになっているのではないか?。とうことです。 もう少し詳しく言うと、WebServerは、HTTP1.1Proxyは持続的接続を前提としたパイプライン接続をサポートしていると考えて通信しているため、一つのソケットに対して複数のレスポンスを返す。しかし現在の自分の書いているソースでは、一つのソケットから読み取れるだけ読み取ってそれをすべてclientのソケットに書き込んでいるため、レスポンスの区別がついていないのではないか?というのが問題点ではないかと考えています。 これを解決するためには、レスポンスのデータを区切りらなくてはなりません。それを知るためにはヘッダのContent-Lengthラベルを、読むのが一番早いのではないかと考えていますが、Transfer-Encodingなるプロトコルがあるようで、これを使って送信されてくるレスポンスの場合はContent-Lengthが使えません(データ部がhtmlの場合は大抵Transferを使っています)。なのでこのTransferプロトコルに対応するプログラムを書く必要性があるのですが、そのためにはデータ部を見なくてはいけないようなのですが、多くのレスポンスはデータ部をgzipで圧縮して送ってきています。 この過程を踏まえたうえでいくつか質問があります。 1つは、まずこの過程の上で何か自分は間違った解釈(プロトコルの理解違いや、問題点の見間違え等)をしていないでしょうか? 2つ目は、C(OSはlinux(Iphone)を使っています。)でgzipを解凍するための方法がわかりません。なにか参考になるサイトはないでしょうか? 3つ目は、参考になるHTTP1.1ProxyServerないしはクライアントの、ソースコードはないでしょうか?(1.0はいくつかみつけたんですが・・・) どれか一つの質問へのお返事でも、結構です。よろしければご回答下さい。

  • HTTPでページを取得。素朴な疑問

    HTTPでページを取得する場合、 ソケットを開いて、HTTP応答を受信するわけですが、 サンプルなどをネットで拾うと、その部分は大体、 while(<SOCKET>){ $s.=$_; } となっていることが多いです。 これって、SOCKETのデータが無くなったら「おしまい」ってことです よね。 そこで、質問なのですが、 極端な話、ソケットを開いた次の瞬間に、サーバーがダウンしてデータが来ないとか、或いは、重くてデータが途切れるとかって場合もあると思うんですけど、 そういった場合は、全くデータが来ないか、しっぽ切れで 終了してしまうのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう