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 fotosEle 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.161Nenhum 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.32Ambos 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.