我写了(除其他事项外)运行在Windows中的本地服务充当SOCKS v5代理为Firefox的应用程序。
我现在正处于调试阶段,并已发现某些网站无法正常工作。 例如,由于是无法查找域的Java Applet的图片上传Facebook.com上的失败。
我的应用程序覆盖隐藏FF配置设置network.proxy.socks__remote__dns其设置为true。 该应用程序的整个目的是允许访问网站的防火墙(例如,如果用户是在中国)的后面时,所以这个设置是必要的,以确保域解析远程也(不只是HTTP请求)。
在JRE6设置(记录在这里 )没有等效设置,因为远程DNS解析和SOCKS V5的功能不V4的文件似乎在暗示我担心,它只是不可能的。
我如何编程确保JRE使用SOCKS v5代理的所有请求(包括DNS)?
UPDATE:步骤来重现此问题:
- 请确保您有一个防火墙阻止(或重定向)上网,包括DNS背后
- 安装腻子上你的选择(例如9870)的一些端口号添加动态SSH隧道。 然后登录到具有完全访问互联网的远程服务器
- 启动Firefox,你将无法浏览网页
- 在FF的网络设置中的SOCKS v5代理为localhost:9870
- 在FF去about:config中,改变network.proxy.socks__remote__dns为真
- 现在,您将能够浏览网页。
- 转到facebook.com,登录,进入您的个人资料,并尝试使用该图片上传Java小程序添加一些图片
它将失败,一系列寻找类似类未发现的错误:
负载:类com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class未找到 。
我认为这是失败,因为JRE无法解析该类驻留在域。 我的事实基础这一信念的文档( http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html )会谈只有约SOCKS v4的(这据我所知,不支持远程DNS)。 我deployment.properties文件位于%APPDATA%\太阳\的Java \部署。 我可以确认,修改我做Java控制面板中被写入到该文件。 如果不是“使用浏览器设置” Java的网络设置我重写,并尝试手动使用SOCKS代理服务器设置,我仍然有问题。 似乎没有成为一个简单的方法来迫使JRE通过代理远程执行DNS。
更新2:
如果没有SOCKS代理,从我的本地客户端
- www.facebook.com解析为203.161.230.171
- upload.facebook.com解析为64.33.88.161
无论主机是否可达(因为防火墙)
如果我登录到远程服务器,我得到:
- www.facebook.com 69.63.187.17
- upload.facebook.com 69.63.178.32
无论几分钟后,这些IP改变,因为它似乎Facebook的使用循环DNS和其他负载平衡。
随着在Firefox设置代理服务器设置,我可以导航到www.facebook.com没有任何困难(因为DNS正在对代理远程解决)。 乳清我去的网页与Java小程序它失败我已经报堆栈跟踪信息。
但是如果我编辑的Windows \ SYSTEM32 \ DRIVERS \ ETC \主机,添加正确的IP为upload.facebook.com我可以得到小程序加载和正常工作(FF的重启有时是必要的)。
这方面的证据似乎支持我的理论是,Java运行时未在代理DNS解析,而只是路由流量虽然它。
我的应用是用于大规模部署和需要与其他网站上(不只是Facebook)的Java小程序的工作。 我真的需要这个问题的变通。
更新3堆栈跟踪转储由ZZ编码器要求:
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.