アプリケーションにSOCKSサポートを追加するにはどうすればよいですか?どこでライブラリを入手できますか?
2 に答える
http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.htmlから
RFC 1928で定義されているSOCKSプロトコルは、クライアントサーバーアプリケーションがTCPレベルとUDPレベルの両方でファイアウォールを安全に通過するためのフレームワークを提供します。その意味で、それはより高いレベルのプロキシ(HTTPまたはFTP固有のプロキシなど)よりもはるかに一般的です。J2SE 5.0は、クライアントTCPソケットのSOCKSサポートを提供します。
SOCKSに関連する2つのシステムプロパティがあります。
socksProxyHost
socksProxyPort
ポート番号 のSOCKSプロキシサーバーのホスト名。デフォルト値は1080です。
今回はプレフィックスの後にドット('。')がないことに注意してください。これは歴史的な理由と下位互換性を確保するためです。この方法でSOCKSプロキシを指定すると、すべてのTCP接続がプロキシを介して試行されます。
例:
$ java -DsocksProxyHost=socks.mydomain.com GetURL
ここでは、コードの実行中に、すべての発信TCPソケットがsocks.mydomain.com:1080のSOCKSプロキシサーバーを通過します。
では、SOCKSプロキシとHTTPプロキシの両方が定義されているとどうなりますか?規則として、HTTPやFTPなどの高レベルのプロトコルの設定は、SOCKSの設定よりも優先されます。したがって、その特定のケースでは、HTTP接続を確立するときに、SOCKSプロキシ設定は無視され、HTTPプロキシに接続されます。例を見てみましょう:
$ java -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080 -DsocksProxyHost=socks.mydomain.com GetURL
ここでは、http設定が優先されるため、httpURLはwebcache.mydomain.com:8080を経由します。しかし、ftp URLはどうですか?FTPには特定のプロキシ設定が割り当てられておらず、FTPはTCPの上にあるため、FTP接続はsocks.mydomsain.com:1080のSOCKSプロキシサーバーを介して試行されます。FTPプロキシが指定されていた場合は、代わりにそのプロキシが使用されます。
jkd 1.5以降、プログラムでSocketによってプロキシを構成することもできます。
例えば :
SocketAddress sa = InetSocketAddress.createUnresolved("mysocksproxy.com", 1080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, sa);
Socket s = new Socket(proxy);
このコードをSocketFactoryに配置することもできます。