none
TCPClientを使ったProxyサーバー経由での接続について RRS feed

  • 質問

  • VB2008でIRCクライアントを作成しています。

    TCPClientクラスを使いIRCサーバーと通信をしておりますが、この方法ですとProxyサーバー経由での接続ができずに悩んでおります。

    上流のWebClientやHttpWebRequest等にはProxyプロパティを設定できるようなのですが。。。

    TCPClientクラスやSocketクラスを用い、Proxyサーバー経由での接続方法をご教示下さい。

    よろしくお願いします。


    • 編集済み o_u 2013年5月20日 0:31
    2013年5月20日 0:30

回答

  • TcpClientの場合、Connect()メソッドで接続すると思いますが、そこでProxyサーバーのアドレスを指定するだけです。

    もう少し書いておくと、HttpWebRequestはTcpClientをWeb用に使いやすくラップしたクラスです。IRC用に使いやすくラップしたいのではれば、ご自身で書きましょう。
    # プログラムを作成しようとしているんですよね? だったら作ればいいかと。

    • 回答の候補に設定 u_o 2013年5月21日 8:06
    • 回答としてマーク 星 睦美 2013年5月21日 8:31
    2013年5月20日 4:07
  • 上流のWebClientやHttpWebRequest等にはProxyプロパティを設定できるようなのですが。。。

    ProxyはHTTPの世界であるため、WebClientやHttpWebRequestはProxyを指定できますが、TCPClientはTCPのレベルでのサポートであり、そのTCPを利用した形態の一つがProxyであることが理解できれば、なぜTCPClientでProxyを指定できないのか理解できると思います。

    TCPClientクラスやSocketクラスを用い、Proxyサーバー経由での接続方法をご教示下さい。

    佐祐理さんも書かれていますが、もう少し補足すれば、TCPClientでProxyサーバーに接続し、HTTPプロトコルでやり取するプログラムを書くことになるでしょう。WebClientのように、例えばIRCClientクラスを作成するイメージになると思います。
    ただ、それはそれで大変ですので、少し探して見ましたが、ProxyClientFactoryというのがあるようですね。ネット上に公開されているソースコードも確認できました。ただし、C#です。

    (参考)
    [VB 2008] TcpClient.Connect with Proxy Server
    http://social.msdn.microsoft.com/Forums/en-us/netfxnetcom/thread/b5f86b6b-f3cc-4dff-afbc-b1f7ac034a01

    Communicating with an HTTP Proxy via a .NET TcpClient
    http://stackoverflow.com/questions/691550/communicating-with-an-http-proxy-via-a-net-tcpclient


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 u_o 2013年5月21日 7:24
    • 回答としてマーク 星 睦美 2013年5月21日 8:31
    2013年5月21日 5:47
    モデレータ

すべての返信

  • TcpClientの場合、Connect()メソッドで接続すると思いますが、そこでProxyサーバーのアドレスを指定するだけです。

    もう少し書いておくと、HttpWebRequestはTcpClientをWeb用に使いやすくラップしたクラスです。IRC用に使いやすくラップしたいのではれば、ご自身で書きましょう。
    # プログラムを作成しようとしているんですよね? だったら作ればいいかと。

    • 回答の候補に設定 u_o 2013年5月21日 8:06
    • 回答としてマーク 星 睦美 2013年5月21日 8:31
    2013年5月20日 4:07
  • 上流のWebClientやHttpWebRequest等にはProxyプロパティを設定できるようなのですが。。。

    ProxyはHTTPの世界であるため、WebClientやHttpWebRequestはProxyを指定できますが、TCPClientはTCPのレベルでのサポートであり、そのTCPを利用した形態の一つがProxyであることが理解できれば、なぜTCPClientでProxyを指定できないのか理解できると思います。

    TCPClientクラスやSocketクラスを用い、Proxyサーバー経由での接続方法をご教示下さい。

    佐祐理さんも書かれていますが、もう少し補足すれば、TCPClientでProxyサーバーに接続し、HTTPプロトコルでやり取するプログラムを書くことになるでしょう。WebClientのように、例えばIRCClientクラスを作成するイメージになると思います。
    ただ、それはそれで大変ですので、少し探して見ましたが、ProxyClientFactoryというのがあるようですね。ネット上に公開されているソースコードも確認できました。ただし、C#です。

    (参考)
    [VB 2008] TcpClient.Connect with Proxy Server
    http://social.msdn.microsoft.com/Forums/en-us/netfxnetcom/thread/b5f86b6b-f3cc-4dff-afbc-b1f7ac034a01

    Communicating with an HTTP Proxy via a .NET TcpClient
    http://stackoverflow.com/questions/691550/communicating-with-an-http-proxy-via-a-net-tcpclient


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 u_o 2013年5月21日 7:24
    • 回答としてマーク 星 睦美 2013年5月21日 8:31
    2013年5月21日 5:47
    モデレータ
  • すみません、何故かMSDNのプロファイル情報が消えてしまったので、プロファイルを再作成しました。

    佐祐理さん、 trapemiyaさん

    回答ありがとうございます。

    説明不足で申し訳ございません、下記のような構図で接続したいと考えておりました。

    IRCクライアント -> PFwd等のSocksサーバー -> Proxyサーバー -> 外部のIRCサーバー

    色々と調べてみたところ、SOCKS4/5 プロトコルの利用が可能みたいなので

    その方法で実装していこうと思います。

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

    2013年5月21日 8:06
  • ここに出てくる「Proxyサーバー」がやっぱり何者か分からないですね。

    質問文には書かれていませんが、HTTP Proxy越えをしたいとかそういう目的があったりするんでしょうか?
    「IRCクライアント」という前提で単に「Proxyサーバー」と書くとそれは「IRC Proxyサーバー」を指しますよ。(そしてIRC Proxyサーバーであれば最初に答えたようにConnect()でアドレスを指定するだけです。)

    どんな質問をしたいのか、ちゃんと説明し、そのためにはご自身で環境を把握する必要がありますよ。

    2013年5月21日 23:11