java runtime 6 com proxy socks v5 - Possível?

Eu escrevi um aplicativo que (entre outras coisas) executa um serviço local no Windows que funciona como um proxy SOCKS v5 para o Firefox.

Eu estou na fase de depuração agora e encontrei certos sites que não funcionam corretamente. Por exemplo, o Applet Java para Upload de Imagens no Facebook.com falha porque não é possível procurar domínios.

Meu aplicativo substitui uma configuração de configuração oculta do FFnetwork.proxy.socks__remote__dns definindo-o paraverdade. O objetivo do aplicativo é permitir o acesso a websites quando estiver protegido por um firewall (por exemplo, se o usuário estiver na China), portanto, essa configuração é essencial para garantir que os domínios sejam resolvidos remotamente (e não apenas solicitações HTTP).

Nas configurações do JRE6 (documentadoAqui) não há uma configuração equivalente, e uma vez que a resolução de DNS remoto é um recurso do SOCKS v5 e não v4, pois a documentação parece implicar que estou preocupado que isso simplesmente não seja possível.

Como posso programaticamente garantir que o JRE use um proxy SOCKS v5 para todas as solicitações (incluindo DNS)?

UPDATE: passos para reproduzir este problema:

Verifique se você está protegido por um firewall que bloqueia (ou redireciona) o acesso à Internetincluindo DNSInstale o PuTTY e adicione um túnel SSH dinâmico em algum número de porta de sua escolha (por exemplo, 9870). Em seguida, faça o login em um servidor remoto que tenha acesso total à internetInicie o Firefox e vocênão ser capaz de navegar na webNas configurações de rede FF, defina o proxy SOCKS v5 para localhost: 9870Em FF, vá para about: config, changenetwork.proxy.socks__remote__dns para verdadeiroAgora você poderá navegar na web.Vá para facebook.com, faça o login, vá para o seu perfil e tente usar o applet java upload de imagens para adicionar algumas fotos

Ele falhará com uma série de erros de classe não encontrados parecidos com:

load: classe com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class não encontrado.

Eu acredito que isso está falhando porque o JRE é incapaz de resolver o domínio em que a classe reside. Estou baseando essa crença no fato de que a documentação (http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html) fala apenas sobre o SOCKS v4 (que, até onde eu sei, não suporta DNS remoto). Meu arquivo deployment.properties está localizado em% APPDATA% \ Sun \ Java \ Deployment. Posso confirmar que as modificações que faço no Java Control Panel são gravadas nesse arquivo. Se, em vez de "Usar configuração do navegador", as configurações de rede para o Java I substituirem e tentarem usar as configurações de proxy do SOCKS manualmente, ainda tenho o problema. Não parece ser uma maneira fácil de forçar o JRE a fazer DNS remotamente através do Proxy.

ATUALIZAÇÃO 2:

Sem o proxy SOCKS, do meu cliente local

www.facebook.com resolve para 203.161.230.171upload.facebook.com resolve para 64.33.88.161

Nenhum host é alcançável (por causa do firewall)

Se eu fizer login no servidor remoto, recebo:

www.facebook.com 69.63.187.17upload.facebook.com 69.63.178.32

Ambos os IPs mudam depois de alguns minutos, como parece que o Facebook usa DNS round-robin e outro balanceamento de carga.

Com as configurações de proxy definidas no Firefox, posso navegar para www.facebook.com sem qualquer dificuldade (já que o DNS está sendo resolvido remotamente no proxy). Quando eu vou para a página com o applet Java, ele falha com as mensagens do stacktrace que eu já relatei.

Contudo se eu editar Windows \ System32 \ drivers \ etc \ hosts, adicionando o IP correto para upload.facebook.com Iposso obter o applet para carregar e funcionar corretamente (o reinício do FF é por vezes necessário).

Esta evidência parece apoiar minha teoria de que o Java Runtime énão Resolvendo o DNS no Proxy, mas em vez disso, apenas o tráfego de roteamento.

Meu aplicativo é para implantação em massa e precisa trabalhar com applets java em outros sites (não apenas no facebook). Eu realmente preciso de uma solução alternativa para esse problema.

UPDATE 3 Stacktrace dump a solicitado por ZZ Coder:

load: class com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class not found.
java.lang.ClassNotFoundException: com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 7 more
Exception: java.lang.ClassNotFoundException: com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class

Dumping class loader cache...
 Live entry: key=http://upload.facebook.com/controls/2008.10.10_v5.5.8/,FacebookPhotoUploader5.jar,FacebookPhotoUploader5.jar, refCount=1, threadGroup=sun.plugin2.applet.Applet2ThreadGroup[name=http://upload.facebook.com/controls/2008.10.10_v5.5.8/-threadGroup,maxpri=4]
Done.

questionAnswers(2)

yourAnswerToTheQuestion