2017-09-21 78 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

您的場景無法從您的問題中輕鬆複製,並且我不認爲所有連接都被完全相同的堆棧跟蹤拒絕。他們實際上是 –

回答