gpt4 book ai didi

firefox - 带有socks v5代理的java runtime 6 - 可能吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:28 25 4
gpt4 key购买 nike

我编写了一个应用程序(除其他外)在 Windows 中运行本地服务,充当 Firefox 的 SOCKS v5 代理。

我现在处于调试阶段,发现某些网站无法正常工作。例如,Facebook.com 上用于图片上传的 Java Applet 失败,因为无法查找域。

我的应用程序覆盖了隐藏的 FF 配置设置 network.proxy.socks__remote__dns 将其设置为 .该应用程序的全部目的是允许在防火墙后访问网站(例如,如果用户在中国),因此此设置对于确保远程解析域(而不仅仅是 HTTP 请求)至关重要。

在 JRE6 设置(记录为 here )中没有等效设置,并且由于远程 DNS 解析是 SOCKS v5 而不是 v4 的功能,因为文档似乎暗示我担心这是不可能的。

如何以编程方式确保 JRE 对所有请求(包括 DNS)使用 SOCKS v5 代理?

更新:
重现此问题的步骤:

  • 确保您位于阻止(或重定向)互联网访问的防火墙后面 包括 DNS
  • 安装 PuTTY 并在您选择的某个端口号(例如 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%\Sun\Java\Deployment。我可以确认我在 Java 控制面板中所做的修改已写入该文件。如果我覆盖并尝试手动使用 SOCKS 代理设置而不是“使用浏览器设置”Java 的网络设置,我仍然有问题。似乎没有一种简单的方法可以强制 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
  • 上传.facebook.com 69.63.178.32

  • 几分钟后,这两个 IP 都会更改,因为 Facebook 似乎使用循环 DNS 和其他负载平衡。

    使用 Firefox 中的代理设置,我可以毫无困难地导航到 www.facebook.com(因为 DNS 是在代理上远程解析的)。当我进入带有 Java 小程序的页面时,它因我已经报告的堆栈跟踪消息而失败。

    然而如果我编辑 Windows\System32\drivers\etc\hosts,为 upload.facebook.com 添加正确的 IP I 可以 使小程序加载并正常工作(有时需要重新启动 FF)。

    这个证据似乎支持我的理论,即 Java 运行时是 不是 在代理上解析 DNS,而只是通过它路由流量。

    我的应用程序用于大规模部署,需要在其他站点(不仅仅是 facebook)上使用 java 小程序。我真的需要解决这个问题。

    更新 3
    Stacktrace dump a 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.

    最佳答案

    new InetSocketAddress(hosta, port) 默认解析IP,如果目标地址解析,SocksSocketImpl首先使用IP。
    如果你想要RemoteDNS,你可以新建Socket你一个代理,然后连接到一个由InetSocketAddress.createUnresolved(host, port)构造的InetSocketAddress。

    你的 Socks Server 必须是 SOCKS5,java SocksSocketImpl 自动检测是版本。

    Proxy p = new Proxy(Proxy.Type.SOCKS, paddr);
    Socket s = new Socket(p);
    InetSocketAddress addr = InetSocketAddress.createUnresolved("host.blocked.by.gfw", port);
    s.connect(addr);

    关于firefox - 带有socks v5代理的java runtime 6 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432038/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com