Socket- Connection über einen SOCKS-Proxy mit JAVA

lukelukeluke

Erfahrenes Mitglied
Hallo Leute,
normalerweise beginne ich so eine Socket-Verbindung, also verbinde mich gleich im Konstruktor der Klasse Socket:
Socket socket = new Socket("domain.com",5963);
Das hat bis jetzt immer funktioniert. Nun möchte ich diese Verbindung über einen Proxy-Server herstellen.
Überall im Internet (z.B. hier: http://java.sun.com/j2se/1.5.0/docs/guide/net/proxies.html) kann man folgenden Code dafür finden:
Code:
SocketAddress addr = new InetSocketAddress("proxydomain.com",80);
Proxy proxy = new Proxy(Proxy.Type.SOCKS,addr);
Socket socket = new Socket(proxy);
InetSocketAddress dest = new InetSocketAddress("domain.com",5963);
socket.connect(dest);
Wieso geht dieser Code bei mir nicht? Es kommt immer ein Fehler, dass Proxy.Type.SOCKS nicht erkannt wird.
Hat jeamnd schon erfolgreich eine Socket Verbindung über einen Proxy gemacht? Evtl. auch mit Username und Passwort Übermittlung?
Danke für eure Hilfe!
 
Moin!
Kurze Frage, hast du auch java 1.5? Proxy.Type.SOCKS gibt es nämlich erst seit da

*grüssle*
MeinerEiner
 
Hallo MeinerEiner,
Ich habe Java 1.4.x, sieht also schlecht aus... :(.
Gibt es eine andere Möglichkeit eine Socket-Verbindung über einen Proxy zu machen?
Gruss, Luke
 
Moin!
Probiere mal folgendes:
Code:
  System.getProperties().put( "proxySet", "true" );
 System.getProperties().put( "proxyHost", "yourProxyMachineName" );
 System.getProperties().put( "proxyPort", "yourProxyPort" );


Das funktioniert bei mir, wenn ich eine HttpURLConnection über einen Proxy mache möchte. Ob das auch in der tieferen Socket Schicht funktioniert, bin ich überfragt.. teste es einfach mal aus!

*grüssle*
MeinerEiner
 
Hallo MeinerEiner,
Danke für deine erneute Antwort!
Mit diesem Trick "funktioniert" es schon eher. Ich kann nun das Programm kompilieren wenn ich vor dem Socketaufbau diese Werte setze...
Jedoch fragt er mich nicht nach Username und Passwort per Standard-Windows Fenster. Gibt es eine Möglichkeit diese mit JAVA zu setzen? Weil der Proxy braucht eine Benutzerauthentifizierung.
Danke für deine Hilfe!
 
Moin!
hmm.. ich glaub das war etwas derart..:
Code:
System.getProperties.put( "http.proxyUser", "yourUsername" )
System.getProperties.put( "http.proxyPassword", "yourPassword" );

*grüssle*
MeinerEiner
 
Hmm, das bringt irgendwie nicht mehr, wenn ich das unten angebe.
Hier ist mein Code:
Code:
System.setProperty( "proxySet", "true" );
System.setProperty( "proxyHost", "70.42.124.12" );
System.setProperty( "proxyPort", "80" );
try {
    System.out.println("Socket start");
    socket = new Socket("server.com",4526);
    System.out.println("Socket up");
(Die IP ist erfunden)

Da ich den Proxy besitze kann ich in der Logdatei nachsehen. Wenn ich nun einen Webbrowser öffne und folgenden Link aufrufe: http://70.42.124.12, dann zeigt es mir zwar eine Fehlermeldung an. Jedoch steht dann in dem Logfile vom Proxy eine weitere Zeile, dass jemand "nicht authorisierter" versucht hat, den Proxy zu verwenden.
Mit diesem oben angezeigten Java-Code (erstmal ohne "http.proxyUser" und "http.proxyPassword" zu setzen) wird nicht einmal eine Zeile zum Proxy Log hinzugefügt. Ich kann also mit Java denn proxy gar nicht errecihen, bzw. es kommt eine Timeout-Fehlermeldung und "Socket up" wird nie angezeigt...
 
Hallo!

Wenn du einen SOCKS Proxy verwendest musst du auch das socksProxyHost und socksProxyPort (default: 1080) System Property setzen.

Gruß Tom
 
Also... ich habe glaube ich gar keinen SOCKS Proxy, sondern einen Squid www-proxy (müsste ein http Proxy sein?). Jedoch geht es auch nicht mit "http.proxyHost"...
Gibt es eine Möglichkeit mit Java den Proxy zu testen?
 
Hi Leute, habe da mal eine Frage an die Expertenrunde...

Ich verwende eine verschlüsselte SSLSocket Verbindung um zwischen einem Client und einem Server zu kommunizieren. Nun soll die Verbindung zusätzlich über einen Proxy laufen. Alle direkte Internetverbindungen sind geschlossen und der einzige Ausgang ist über den Proxy. Den Code den ich für die direkte Verbindung verwende sieht einigermaßen so aus:

Code:
SSLSocketFactory sf = getMySSLContext().getSocketFactory();
			ss = (SSLSocket) sf.createSocket(dest, destport);
			ss.startHandshake();

Gibt es da besondere Anforderungen, die der Proxy erfüllen muss, um die SSL Verbindung weiterleiten zu können? Was muss ich wie einstellen, damit der Proxy verwendet wird?

Vielen Dank für Eure Hilfe...

Gruß
SaintOliver
 
Zurück