Java Runtime 6 mit Socks V5 Proxy - Möglich?

Ich habe eine Anwendung geschrieben, die (unter anderem) einen lokalen Dienst in Windows ausführt, der als SOCKS v5-Proxy für Firefox fungiert.

Ich bin gerade in der Debugging-Phase und habe bestimmte Websites gefunden, die nicht richtig funktionieren. Das Java-Applet zum Hochladen von Bildern auf Facebook.com schlägt beispielsweise fehl, weil keine Domänen gesucht werden können.

Meine App überschreibt eine versteckte FF-Konfigurationseinstellungnetwork.proxy.socks__remote__dns Setzen Sie es aufwahr. Der gesamte Zweck der App besteht darin, den Zugriff auf Websites hinter einer Firewall zuzulassen (z. B. wenn sich der Benutzer in China befindet). Diese Einstellung ist daher wichtig, um sicherzustellen, dass Domänen auch remote aufgelöst werden (und nicht nur HTTP-Anforderungen).

In den JRE6 Einstellungen (dokumentiertHier) Es gibt keine entsprechende Einstellung, und da die Remote-DNS-Auflösung eine Funktion von SOCKS v5 und nicht von v4 ist, scheint die Dokumentation zu implizieren, dass ich mir Sorgen mache, dass dies einfach nicht möglich ist.

Wie kann ich programmgesteuert sicherstellen, dass die JRE einen SOCKS v5-Proxy für alle Anforderungen (einschließlich DNS) verwendet?

UPDATE: Schritte zum Reproduzieren dieses Problems:

Stellen Sie sicher, dass Sie sich hinter einer Firewall befinden, die den Internetzugriff blockiert (oder umleitet)einschließlich DNSInstallieren Sie PuTTY und fügen Sie einen dynamischen SSH-Tunnel auf einem Port Ihrer Wahl (z. B. 9870) hinzu. Melden Sie sich dann bei einem Remote-Server an, der über vollen Internetzugang verfügtStarten Sie Firefox und Sie werdennicht in der Lage sein, im Internet zu surfenStellen Sie in den FF-Netzwerkeinstellungen den SOCKS v5-Proxy auf localhost: 9870 einGehen Sie in FF zu about: config, changenetwork.proxy.socks__remote__dns zu wahrSie können jetzt im Internet surfen.Gehen Sie zu facebook.com, melden Sie sich an, gehen Sie zu Ihrem Profil und versuchen Sie, mit dem Java-Applet zum Hochladen von Bildern einige Bilder hinzuzufügen

Es wird mit einer Reihe von Fehlern fehlschlagen, die nicht gefunden wurden und etwa so aussehen:

Laden: Klasse com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class nicht gefunden.

Ich glaube, dass dies fehlschlägt, weil die JRE die Domäne, in der sich die Klasse befindet, nicht auflösen kann. Ich begründe diese Überzeugung damit, dass die Dokumentation (http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html) spricht nur über SOCKS v4 (das meines Wissens kein Remote-DNS unterstützt). Meine Datei deployment.properties befindet sich in% APPDATA% \ Sun \ Java \ Deployment. Ich kann bestätigen, dass Änderungen, die ich in der Java-Systemsteuerung vornehme, in diese Datei geschrieben werden. Wenn ich anstelle von "Browsereinstellung verwenden" die Netzwerkeinstellungen für Java überschreibe und versuche, die SOCKS-Proxyeinstellungen manuell zu verwenden, besteht weiterhin das Problem. Es scheint keine einfache Möglichkeit zu geben, die JRE zu zwingen, DNS über den Proxy aus der Ferne auszuführen.

UPDATE 2:

Ohne den SOCKS-Proxy von meinem lokalen Client

www.facebook.com wird in 203.161.230.171 aufgelöstupload.facebook.com wird in 64.33.88.161 aufgelöst

Keiner der Hosts ist erreichbar (wegen der Firewall)

Wenn ich mich beim Remote-Server anmelde, erhalte ich:

www.facebook.com 69.63.187.17upload.facebook.com 69.63.178.32

Beide IP-Adressen ändern sich nach ein paar Minuten, da Facebook offenbar Round-Robin-DNS und andere Verfahren zum Lastenausgleich verwendet.

Mit den in Firefox festgelegten Proxy-Einstellungen kann ich problemlos zu www.facebook.com navigieren (da DNS über den Proxy remote aufgelöst wird). Whey ich gehe auf die Seite mit dem Java-Applet, es schlägt fehl mit den Stacktrace-Nachrichten, die ich bereits gemeldet habe.

jedoch Wenn ich Windows \ System32 \ drivers \ etc \ hosts bearbeite, füge ich die richtige IP für upload.facebook.com I hinzukönnen Lasse das Applet laden und arbeite korrekt (manchmal ist ein Neustart von FF erforderlich).

Dieser Beweis scheint meine Theorie zu stützen, dass die Java-Laufzeit istnicht Lösen Sie DNS auf dem Proxy auf, sondern leiten Sie lediglich den Datenverkehr weiter.

Meine Anwendung ist für die Massenbereitstellung vorgesehen und muss mit Java-Applets auf anderen Websites (nicht nur Facebook) zusammenarbeiten. Ich brauche wirklich eine Abhilfe für dieses Problem.

UPDATE 3 Stacktrace Dump eines von ZZ Coder angeforderten:

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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage