草庐IT

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

coder 2024-03-13 原文

我编写了一个应用程序(除其他外)在 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/

    有关firefox - 带有socks v5代理的java runtime 6 - 可能吗?的更多相关文章

    1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

      我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

    2. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

      我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

    3. ruby-on-rails - 带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中要求 'rspec/rails' 吗? - 2

      使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做

    4. Ruby:如何使用带有散列的 'send' 方法调用方法? - 2

      假设我有一个类A,里面有一些方法。假设stringmethodName是这些方法之一,我已经知道我想给它什么参数。它们在散列中{'param1'=>value1,'param2'=>value2}所以我有:params={'param1'=>value1,'param2'=>value2}a=A.new()a.send(methodName,value1,value2)#callmethodnamewithbothparams我希望能够通过传递我的哈希以某种方式调用该方法。这可能吗? 最佳答案 确保methodName是一个符号,而

    5. ruby - Watir 更改 Mozilla Firefox 首选项 - 2

      我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:

    6. ruby-on-rails - 带有 Pry 的 Rails 控制台 - 2

      当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

    7. ruby - HTTP 请求中的用户代理,Ruby - 2

      我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)

    8. ruby-on-rails - capybara poltergeist - 覆盖用户代理 - 2

      有人知道如何将capybarapoltergeist的用户代理覆盖到移动用户代理以进行测试吗?我发现了一些有关为seleniumwebdriver配置它的信息:http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/这在capybara闹鬼中怎么可能? 最佳答案 请参阅poltergeistgithub页面上的链接:https://github.com/teampoltergeist/polte

    9. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

      我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

    10. ruby - 如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作? - 2

      我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe

    随机推荐