【问题标题】:How to run java behind proxychains如何在代理链后面运行 java
【发布时间】:2017-10-02 08:27:09
【问题描述】:

我有一个 java 类,其中 htmlunit 的 webclient 获取 html 页面。我想通过 Tor 代理发送数据包。当我在我的 java 代码中设置代理时,通过设置系统属性:

System.getproperty("socksProxyHost","127.0.0.1");
System.getproperty("socksProxyPort","9050");

,它可以正常工作。但是当我想使用工具ProxyChains时,

proxychains java -jar MyPackagedJava.jar

,这不行! 换句话说,我想通过 ProxyChains 发送 htmlunit 的数据包。怎么做?

【问题讨论】:

  • “它不起作用”...您是否有错误消息来支持该声明?
  • 您在尝试时是否删除了代码中的System.getproperty("socksProxy 行?
  • [回复 Stultuske]:没有明确的错误...我只是向 'ipecho.net/plain' 或 'icanhazip.com' 发送请求并查看我的 IP。使用代理链时不会改变!
  • [回复“Oleg 1”]:是的。
  • [answer to comment by 'Oleg'] 如果您删除这些行,包裹将通过无包裹发送。换句话说,没有办法通过代理链的代理发送包。

标签: java proxy tor packets


【解决方案1】:

HtmlUnit 不使用 java 代理设置,您必须在客户端设置期间进行配置。 看看HtmlUnit -Getting started;有一个代理设置示例。

【讨论】:

    【解决方案2】:

    Java 不通过代理链的代理发送数据包。因此,您必须在编码中设置代理。例如,当使用 HtmlUnit & WebClient 对象请求网页时,只需使用以下内容:

    **WebClient webclient;**
    if (proxy != null && !proxy.getHost().trim().equalsIgnoreCase("")) {
            if (proxy.getType() == null || proxy.getType().trim().equalsIgnoreCase("")
                    || proxy.getType().trim().equalsIgnoreCase("http") ||
                    proxy.getType().trim().equalsIgnoreCase("https"))
                webclient = new WebClient(BrowserVersion.CHROME, proxy.getHost(), proxy.getPort());
            else if (proxy.getType().trim().equalsIgnoreCase("socks")) {
                System.setProperty("socksProxyHost", proxy.getHost());
                System.setProperty("socksProxyPort", String.valueOf(proxy.getPort()));
                webclient = new WebClient(BrowserVersion.CHROME);
            }
            webclient.getCredentialsProvider().setCredentials(AuthScope.ANY, new NTCredentials(
                    proxy.getUsername(), proxy.getPassword(), "", ""));
    
        } else {
            webclient = new WebClient(BrowserVersion.CHROME);
        }
    

    proxy 对象是下面定义的 Proxy 类的一个实例:

    public class Proxy {
        private String host, username, password,type;
        private int port;
    
    
    public String getType() {
        return type;
    }
    
    public void setType(String type) {
        this.type = type;
    }
    
    public Proxy(String host, int port, String username, String password) {
        this.host = host;
        this.port = port;
        this.username = username;
        this.password = password;
    }
    
    public void setHost(String host) {
        this.host = host;
    }
    
    public String getHost() {
        return this.host;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    public String getUsername() {
        return this.username;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    
    public String getPassword() {
        return this.password;
    }
    
    public void setPort(int port) {
        this.port = port;
    }
    
    public int getPort() {
        return this.port;
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2014-04-06
      • 1970-01-01
      相关资源
      最近更新 更多