Napisałem aplikację, która (między innymi) uruchamia usługę lokalną w systemie Windows, która działa jako serwer proxy SOCKS v5 dla przeglądarki Firefox.Java Runtime 6 ze skarpetkami v5 proxy - Możliwe?
Jestem w fazie debugowania już teraz i znalazłem niektóre witryny, które nie działają poprawnie. Na przykład aplet Java do przesyłania zdjęć w serwisie Facebook.com nie działa, ponieważ nie może wyszukiwać domen.
Moja aplikacja zastępuje ukrytą FF config ustawienia network.proxy.socks__remote__dns ustawienie go na prawdziwej. Celem aplikacji jest umożliwienie dostępu do stron internetowych za firewallem (np. Jeśli użytkownik znajduje się w Chinach), więc to ustawienie jest niezbędne, aby zapewnić zdalne rozwiązywanie domen (a nie tylko żądania HTTP).
W ustawieniach JRE6 (udokumentowane here) nie ma ustawienia równoważnego, a ponieważ zdalna rozdzielczość DNS jest cechą SOCKS v5, a nie v4, jak sugeruje dokumentacja, obawiam się, że po prostu nie jest to możliwe.
Jak mogę programowo upewnić się, że środowisko JRE korzysta z proxy SOCKS v5 dla wszystkich żądań (w tym DNS)?
UPDATE: Kroki prowadzące do odtworzenia problemu:
- Upewnij się, że jesteś za firewallem, który blokuje (lub przekierowuje) dostępu do Internetu tym DNS
- Install kit i dodać dynamiczny tunel SSH na wybranym numerze portu (np. 9870). Następnie zalogować się na zdalnym serwerze, który ma pełny dostęp do internetu
- Uruchom Firefoksa i będzie nie móc przeglądać strony internetowe
- W ustawieniach sieciowych FF określonych proxy SOCKS v5 do localhost: 9870
- W FF przejdź do: config, zmień network.proxy.socks__remote__dns na true
- Będziesz mógł teraz przeglądać Internet.
- Idź do facebook.com, zaloguj się, przejdź do swojego profilu i próbować używać apletu java uploader zdjęcie, aby dodać kilka zdjęć
Będzie ona niepowodzeniem z serii klasa nie znaleziono błędów szuka podobnego do:
load: class com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class nie znaleziono.
Uważam, że to się nie udaje, ponieważ środowisko JRE nie może rozpoznać domeny, w której znajduje się klasa. Opieram to na tym, że dokumentacja (http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html) mówi tylko o SOCKS v4 (o ile wiem, nie obsługuje zdalnego DNS). Mój plik deployment.properties znajduje się w% APPDATA% \ Sun \ Java \ Deployment. Mogę potwierdzić, że modyfikacje dokonane w panelu sterowania Java są zapisywane w tym pliku. Jeśli zamiast "Użyj ustawienia przeglądarki" ustawienia sieciowe dla Java ja przesłonię i próbuję ręcznie użyć ustawień proxy SOCKS, nadal mam problem. Wydaje się, że nie istnieje łatwy sposób zmuszenia JRE do zdalnego wykonywania DNS za pośrednictwem serwera proxy.
UPDATE 2:
Bez proxy SOCKS, z mojego lokalnego klienta
- www.facebook.com postanawia 203.161.230.171
- upload.facebook.com postanawia 64.33 .88.161
Żaden host nie jest osiągalny (z powodu zapory)
Jeśli mogę się zalogować do serwera zdalnego, otrzymuję:
- www.facebook.com 69.63.187.17
- upload.facebook.com 69.63.178.32
Obie te zmiany IP po kilku minutach, jak się wydaje, Facebook wykorzystuje system DNS roboczy typu round-robin i inne równoważenia obciążenia.
Dzięki ustawieniom serwera proxy ustawionym w przeglądarce Firefox mogę bez problemu nawigować do witryny www.facebook.com (ponieważ serwer DNS jest zdalnie rozwiązywany w serwerze proxy). Whey Idę na stronę z apletem Javy, która zawodzi z komunikatami stacktrace, które już zgłosiłem.
Jednak jeśli mogę edytować Windows \ System32 \ drivers \ etc \ hosts, dodając odpowiednią IP dla upload.facebook.com I może uzyskać aplet załadować i działa poprawnie (restart FF jest czasami konieczne) .
Ten dowód wydaje się potwierdzać moją teorię, że Java Runtime jest nie rozwiązywanie DNS na Proxy, ale zamiast tego tylko ruting ruchu mimo to.
Moja aplikacja służy do masowego wdrażania i musi współpracować z apletami Java na innych stronach (nie tylko na Facebooku). Naprawdę potrzebuję obejścia tego problemu.
UPDATE 3 StackTrace zrzucić żądana przez 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.
Wystąpiłem również w tym problemie, Java nie rozpoznaje zdalnie serwera DNS. Czy kiedykolwiek to działa? – Arya
Nie, nigdy nie doszedłem do rozwiązania. Porzucił ten projekt. – rwired
Przykro mi, że nie wymyśliłeś rozwiązania, ale pomogłeś mi niezmiernie! To całe "java nie rozwiązuje zdalnie serwera DNS" jest sztucznym hobbitem. –