2017-09-21 51 views
0

基本信息:
我试图让一个Java应用程序通过SOCKS代理连接到一个目标。我发现this了解如何配置代理设置,这很重要,因为我无法更改源代码来配置代理使用情况。但是,应用程序没有通过代理连接。JVM和SocksProxy设置在Ubuntu 16.04上不起作用

详细
我用一个小的自定义类测试这一点,这只能有一个主要方法,并做到这一点:

public static void main(String... strings) throws URISyntaxException, IOException { 
    URL url = new URI("http", null, "localhost", 9998, null, null, null).toURL(); 
    System.out.println("opening connection to " + url.toString()); 
    URLConnection c = url.openConnection(); 
    System.out.println("connecting"); 
    c.connect(); 
    System.out.println(c.getContentLength()); 
    System.out.println(c.getContentType()); 
} 

然后,我开始使用java <properties> <classname>该类。 属性我已经试过到目前为止(单一及复合):

  1. socksPropertyHost=localhost
  2. socksPropertyPort=9999
  3. http.proxySet=true
  4. http.proxyHost=localhost
  5. http.proxyPort=9999
  6. https.proxySet=true
  7. https.proxyHost=localhost
  8. https.proxyPort=9999
  9. proxySet=true
  10. proxyHost=localhost
  11. proxyPort=9999
  12. java.net.useSystemProxies=true

同样,我添加了这些命令行,然后添加到我的环境中,在jre/lib/net.properties设置的值和噘嘴他们转换成逗号分隔的列表,然后在bash脚本中以-D$JAVA_OPTS的形式传递。

所有的连接用

Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused) 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at java.net.Socket.connect(Socket.java:538) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:339) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:357) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966) 
    at sandbox.Sandbox.main(Example.java:16) 

基本上拒绝了,这个问题(S)这里是/是这个/这些:

难道我做错了什么吗?这是一个错误?它只是我的系统吗? 任何答案将不胜感激。

+1

-D不带逗号分隔的列表。您需要为每个要设置的属性设置一个-D。 –

+0

好的,澄清一下:我在命令行中添加了每一个变量(通过'-Done,-Dtwo,-Dthree'),我将它们添加到'application.properties'中,将它们添加到环境中,set 'net.properties'中的每个值,并且在绝望中尝试了一个bash脚本,它将它们组合成一个单独的字符串。 –

+0

您的场景无法从您的问题中轻松复制,并且我不认为所有连接都被完全相同的堆栈跟踪拒绝。他们实际上是 –

回答