none
C#でプロキシを作成しています2 RRS feed

  • 質問

  • 以前下記のスレッドで質問させていただき
    回答もいただいたのですが
    すこし観点がずれていたので
    また、質問させていただきます。

    やりたいこととしては
    ①IE設定でプロキシサーバを設定する。
    ②IEを起動するごとに作成する実行体(プロキシみたいな役割)でIEの表示を感知する
    ③その実行体がアドレスを見て特定のアドレスの場合のみヘッダを追加して
    Webサーバへ飛ばす
    という実行体を作成したいと考えています。

    HttpListenerにPrefixes.AddするものはIPを指定していますが
    プロキシサーバを指定することができないのでしょうか

    よってどのWebを表示しても
    一度は作成する実行体を通ってから
    Webを表示するようにしたいのですが…
    2010年8月10日 8:58

回答

  • >具体例を示すか、別の説明をお願いできませんか。
    →HttpListenerにPrefixes.Addに***.comと設定できるのか?
    そしてIEで通信を受け取れるかという意味でした。

    設定はできても、通信は受け取れません。
    Prefixes に何を追加しようと、IE の通信先を制御するものではないからです。

    各端末の設定するプロキシサーバーを自IPアドレスにすれば
    IEでyahooを開いた時に通信を取得できるのでしょうか?
    (全端末で設定しなければいけませんが…)

    今回作るプログラムが待ち受けするアドレスをプロキシとして設定することです。
    そうすることで、IE の通信が自作のプログラムをプロキシとして頼ってきますのでそこで押さえることは可能です。
    ただし、SSL など、ほかのプロトコルへのカバーをどうするかも考えておく必要はあります。

    このプログラムを 1 つのマシンだけで動かして、複数のマシンからアクセスさせる場合、負荷面や管理面で厳しいかもしれません。
    個々のマシンでこのプログラムをそれぞれ動かす場合、負荷は分散しますが、プログラム差し替えなどが発生した場合の手間がかかります。
    また、プロキシサーバーの設定を変えられたり、ほかのブラウザを利用されると、このプログラムの意味がなくなります。

    今回の要件でこのアプローチの適切なのかはわかりません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月10日 14:21
    モデレータ

すべての返信

  • HttpListenerにPrefixes.AddするものはIPを指定していますが
    プロキシサーバを指定することができないのでしょうか

    「Prefixes.Add にプロキシサーバーを指定する」とはどういったことでしょうか。
    (この文脈で”プロキシサーバー”が意図するものがわかりませんでした)
    具体例を示すか、別の説明をお願いできませんか。

    たとえば、「HttpListener で動作させているマシン名を Prefixes.Add で指定したい」というのであれば、前回のスレッドでの結論から変わらずにできないということになると思います。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月10日 9:57
    モデレータ
  • やりたいこととしては
    ①IE設定でプロキシサーバを設定する。
    ②IEを起動するごとに作成する実行体(プロキシみたいな役割)でIEの表示を感知する
    ③その実行体がアドレスを見て特定のアドレスの場合のみヘッダを追加してWebサーバへ飛ばす
    という実行体を作成したいと考えています。

    もう一点明らかにしておきたいので確認させてください。

    IE で設定するプロキシサーバーとは、今回作成しているプロセスとは何ら関係のないものでしょうか?
    通常のプロキシサーバーを設定しておきながら、常駐しているプロセス(=今回作成するもの)が横取りしたいと言うことでしょうか?
    そうだとすると、単純にプロキシサーバーを自作するだけでは足りません。
    通信を横取り、あるいは仲介する仕組みか、ブラウザにアドオンのような形で組み込むような仕組みが必要になると予想されます。プロキシサーバーを作ることよりも、そちらの技術検討を優先すべきです。

    逆に、IE で設定するプロキシサーバーが今回作成しているプロセスを動かしているマシンの IP アドレスを指定するのであれば、今の路線(プロキシサーバーを自作する)で特に問題ないと思いますが、投げ先のプロキシサーバーの IP アドレスはプログラム内部で把握している必要があります。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月10日 10:02
    モデレータ
  •  

    親切にありがとうございます。

    >具体例を示すか、別の説明をお願いできませんか。

    →HttpListenerにPrefixes.Addに***.comと設定できるのか?

    そしてIEで通信を受け取れるかという意味でした。

     

    >IE で設定するプロキシサーバーとは、今回作成しているプロセスとは何ら関係のないものでしょうか?」

    関係ありません。設定すればすべての通信を受け取れると思ったからです。

     

    ということは通信を横取りするということになるかもしれないです。

     

    質問

    >IE で設定するプロキシサーバーが今回作成しているプロセスを動かしているマシンの IP アドレスを指定するのであれば、今の路線(プロキシサーバーを自作する)で特に問題ないと思います

    →各端末の設定するプロキシサーバーを自IPアドレスにすれば

    IEでyahooを開いた時に通信を取得できるのでしょうか?

    (全端末で設定しなければいけませんが…)

    2010年8月10日 14:08
  • >具体例を示すか、別の説明をお願いできませんか。
    →HttpListenerにPrefixes.Addに***.comと設定できるのか?
    そしてIEで通信を受け取れるかという意味でした。

    設定はできても、通信は受け取れません。
    Prefixes に何を追加しようと、IE の通信先を制御するものではないからです。

    各端末の設定するプロキシサーバーを自IPアドレスにすれば
    IEでyahooを開いた時に通信を取得できるのでしょうか?
    (全端末で設定しなければいけませんが…)

    今回作るプログラムが待ち受けするアドレスをプロキシとして設定することです。
    そうすることで、IE の通信が自作のプログラムをプロキシとして頼ってきますのでそこで押さえることは可能です。
    ただし、SSL など、ほかのプロトコルへのカバーをどうするかも考えておく必要はあります。

    このプログラムを 1 つのマシンだけで動かして、複数のマシンからアクセスさせる場合、負荷面や管理面で厳しいかもしれません。
    個々のマシンでこのプログラムをそれぞれ動かす場合、負荷は分散しますが、プログラム差し替えなどが発生した場合の手間がかかります。
    また、プロキシサーバーの設定を変えられたり、ほかのブラウザを利用されると、このプログラムの意味がなくなります。

    今回の要件でこのアプローチの適切なのかはわかりません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月10日 14:21
    モデレータ
  • AZuleanさん
    いつもありがとうございます。

    このプログラムを 1 つのマシンだけで動かして、複数のマシンからアクセスさせる場合、負荷面や管理面で厳しいかもしれません。
    ⇒このプログラムは1つのマシンで動くように考えています。

    IE で設定するプロキシサーバーが今回作成しているプロセスを動かしているマシンの IP アドレスを指定するのであれば、今の路線(プロキシサーバーを自作する)で特に問題ないと思いますが、
    ⇒端末設定を統制するのは可能なのでプロセスを動かしているマシンの IP アドレスを
    指定することができます。

    >IE の通信が自作のプログラムをプロキシとして頼ってきますのでそこで押さえることは可能です。
    ただし、SSL など、ほかのプロトコルへのカバーをどうするかも考えておく必要はあります。
    ⇒プロキシは特定のアドレスの場合のみ特別な処理を追加して飛ばし、
    別のアドレスであればスルーする仕組みで考えています。


    上記のご回答を考慮すると
    IEの設定:127.0.0.1:8082
    listener.Prefixes.Add="http://127.0.0.1:8082"
    と設定すればプロキシとして動作可能ということでよろしいのでしょうか?
    2010年8月11日 2:15
  • 動作を確認することがありがとうございました。

     

    あとはUAC問題です。

    もう少し考えます。

    2010年8月11日 23:53
  • ⇒このプログラムは1つのマシンで動くように考えています。

    上記のご回答を考慮すると
    IEの設定:127.0.0.1:8082
    listener.Prefixes.Addhttp://127.0.0.1:8082
    と設定すればプロキシとして動作可能ということでよろしいのでしょうか?

    あるマシンで動作させ、ほかのマシンはすべてそのマシンを通るようにするのですよね?
    そうであれば、127.0.0.1 (=自分自身=今回で言えば IE を動かすマシン)ではまずいでしょう。その動かしているマシンの IP アドレスを指定するべきです。(両方とも)

    ⇒プロキシは特定のアドレスの場合のみ特別な処理を追加して飛ばし、
    別のアドレスであればスルーする仕組みで考えています。

    実際にうまく動作するか確認されましたか?
    実際に展開してから苦情が殺到するよりも、組織内でよく利用されるプロトコル(SSL?FTP?)について確認しておくことをお勧めします。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月12日 10:35
    モデレータ
  • このプログラムは1つのマシンで動くように考えています。 

    ⇒スイマセン説明が悪かったです。

    各端末に配布し、端末内のプログラムを通す予定としているため127.0.0.1しました。

    よって他のマシンが見に来ることはありませんので問題ないと考えました。

    2010年8月12日 23:55