5

認証をサポートする Java ソックス プロキシ クライアント クラスを探しています。何か提案はありますか? java.net.Proxy は認証をサポートしていません。

編集:認証データをソケット経由で特定のプロキシホストに接続する方法が見つからないようです。Authenticator.setDefault() は、資格情報のセットを 1 つだけ許可します。

 Authenticator.setDefault(new Authenticator(){
  protected  PasswordAuthentication  getPasswordAuthentication(){
   PasswordAuthentication p=new PasswordAuthentication("xxx", "xxx".toCharArray());
   return p;
  }
 });
 Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("xxx.xx.xxx.xxx", xxx));

   Socket sock = new Socket(proxy);

   sock.connect(new InetSocketAddress(server,xx));
4

2 に答える 2

5

Java は、 Networking Propertiesjava.net.Authenticatorに記載されているように、登録済みまたは設定を介した Socks プロキシ構成をサポートしています。

SOCKS プロトコルのサポート設定

SOCKS のユーザー名とパスワードは、次の方法で取得されます。最初に、アプリケーションが java.net.Authenticatorデフォルトのインスタンスを登録している場合、これは文字列「SOCKS5」に設定されたプロトコルと、文字列「SOCKS authentication」に設定されたプロンプトで照会されます。オーセンティケーターがユーザー名/パスワードを返さない場合、またはオーセンティケーターが登録されていない場合、システムはユーザー設定 " java.net.socks.username" および " " をチェックしますjava.net.socks.password。これらのプリファレンスが存在しない場合は、システム プロパティ " user.name" でユーザー名がチェックされます。この場合、パスワードは提供されません。

SocksProxyHost
SocksProxyPort (デフォルト: 1080)
SOCKS プロキシ サーバーの名前と、SOCKS プロトコル層で使用されるポート番号を示します。SocksProxyHost が指定されている場合、すべての TCP ソケットは SOCKS プロキシ サーバーを使用して接続を確立するか、接続を受け入れます。SOCKS プロキシ サーバーは、SOCKS v4 または v5 サーバーのいずれかであり、認証されていない接続を許可する必要があります。

クライアント コードの例については、Stack Overflow でこの回答を確認できます。

編集:コメントによる回答の更新

JDK での SOCKS サポートの副作用は、JVM 全体が同じ SOCKS プロキシを通過することです。したがって、これはうまくいかない場合があります。

これAuthenticatorは、JVM のすべての認証 (HTTP 認証、プロキシ認証) に影響します。繰り返しますが、これはうまくいかないかもしれません。

あなたの場合、考えられる解決策は、 HttpComponents (従来のCommons HTTP Client 3.xの後継)からHttpClientを使用することです。サンプル、特にプロキシ経由のリクエストプロキシ認証の例を確認してください。

于 2009-10-08T21:02:45.617 に答える
0

この HttpClient を使用します (Apache のものではありません)。

http://www.innovation.ch/java/HTTPClient/

これは単なる URL ハンドラであるため、通常の HTTPUrlConnection を使用できます。SOCKS およびその他のプロキシをサポートしています。

于 2009-10-08T23:33:34.903 に答える