Socket- Connection über einen SOCKS-Proxy mit JAVA

Nun hat's mich auch hier erwischt.

Ich muss eine bestehende Klasse anpassen, damit diese über einen Proxy geht. Die Klasse benutzt jedoch java.net.Socket und nicht HttpURLConnection.

Hier ein Test-Schnippel:


Code:
// der zu kontaktierende Host
String host = "soap.schnipschnap.de";
int port = 80;

// unser Proxy
String proxyHost = "192.168.13.42";
int proxyPort = 8080;

// put properties
System.setProperty("socksProxyPort", proxyHost);
System.setProperty("socksProxyHost", String.valueOf(proxyPort));

// set up proxy
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyHost, proxyPort));

// set up socket
socket = new Socket(proxy);

// contact host
socket.connect(new InetSocketAddress(host, port));

nun bleibt die Appli bei socket.connect() hängen.
Der Proxy (Es ist ein ISA Webproxy für HTTP) funktioniert, denn ich schreibe diesen Beitrag via obigen Proxy.

Proxy.Type.HTTP
habe ich auch schon versucht, doch dann erhalte ich:
java.lang.IllegalArgumentException: Invalid Proxy

es kann doch wirklich nicht so schwer sein?

cheerioh
SiS

BTW: umprogrammieren auf HTTPUrlConnection() is nicht.............
 
Hallo zusammen,
Hallo zusammen,
ich bin rech neu in Java und arbeite an einer Client-Server-Applikation, die Bereits besteht.

Bei Direktverbindung wird bisher eine normale Socketverbindung zu Ausgewählter IP und Port aufgebaut.

Arbeite mit JRE 1.6.

Gewünscht ist nun, das wir durch proxies gut durchkommen.
Am Besten wäre es, wenn die vorherige SOCKET-Verbindung über die normale http oder https Verdingung "durchgeschleust" werden könnte.

Ich vermute jedoch das dies so einfach nicht geht.

Habt ihr ideen oder praktikable Alternativen?

Wenn dies nicht geht würde mir erstmal auch eine SOCKS-Serververbindung weiterhelfen. Diese funktioniert bei mir arber bisher auch nicht.
Ich glaube ich habe die Zusammenhänge der Socket, SOCKs, Proxy etc Verbindung noch nicht verstanden-.

Bevor ich das komplette Problem beschreibe wollte ich fragen ob mir wer sagen kann ob mein obiger Vorschlag geht, Sinn macht bzw was die alternativen sind.

Danke für eure Antworten schon mal.
 
Zuletzt bearbeitet:
Ok dann werd ich das mal weiter ausführen.

Bisher wird eine einfache Verbindung über:
java.net.Socket socket = new java.net.Socket(ip,port);

Aufgebaut.

Da ich vermute das es erstmal(am einfachsten) nur über SOCKS-proxy geht, da hier auch niemand was anderes geschrieben hat. Habe ich mal mit SOCKs rumprobiert.

Da ich mir nicht sicher bin wie die Zusammenhänge mit socket und SOCKS-Proxy Verbindung bin habe ich testweise einen proxy ohne authentifizierung aufgebaut um meine SW zu testen.

Mein Ansatz war nun:
System.setProperty("socksProxyHost", "xxx.xxx.xxx.xxx");
System.setProperty("socksProxyPort", "1080");

direkt vor dem Verbindungsaufbau mit dem Socket zu verwenden.

Aber irgendwie geht das nicht.

Weis da jemad was?

Danke!
 
Steht ja alles obedran. Wo hast du denn Probleme?

Ich vermute jedoch das dies so einfach nicht geht.
Doch, das ist ganz einfach ;-) - jedenfalls wenn man's wenigstens einmal hinbekommen hat :p

System properties setzen für http.proxyHost, http.proxyPort, gleiches für https. Wenn der Proxy eine Passwortabfrage hat, kannste noch http.proxyUser und http.proxyPassword setzen, wobei es Sinn machen kann, solche Applikationen ohne Abfrage nur auf bestimmte Seiten zu lassen. Wir setzten diese Parameter beim Start der VM als VM-Arguments (-Dhttp...), damit das nirgends im Code gesetzt werden muss.

Dazu gibt es noch nonProxyHost, dort ist bei uns *.firma.ch drin - weil Connects zu unseren Seiten ja nicht über den Proxy "ins Internet" müssen...

Gruss,
slowy
 
Ok kann man also einfach eine
Socketverbindung mit z.B.
java.net.Socket socket = new java.net.Socket(ip,port);

mit einer Http Verbindung aufbauen, oder muss man dann den Code umschreiben?

Ich würde mich gerne über den Proxyserver mit einer Applikation auf einem anderen Server verbinden.
Bisher direkt über Socketverbindung.
Man bedenke der Port am Zielserver ist ein anderer wie der des Proxies.

Proxy war bisher nicht implementiert und über Kommandozeile hats nicht Funktioniert.
Das hier war ein Beispiel,das ich probiert hatte.
start C:\"Program Files (x86)"\Java\jre7\bin\javaw.exe -DproxySet=true -DproxyHost=xxx.xxx.xxx.xxx -DproxyPort=8080 -DsocksProxyHost=xxx.xxx.xxx.xxx -DsocksProxyPort=1080 -cp ;javadbf-0.4.0.jar;comm.jar; -Xms512m -Xmx512m path/MainDummy

Oder muss ich noch was beachten. Kommandozeile würds auch tun, wenn die Verbindung über https oder http auf dem Proy gehen kann.
 
Hallo zusammen. Habe das inzwischen etwas so wie der Kollege von damals. Nur mit meinen Werten. Und habe den Namensdreher bei Host und Port rausgemacht, den er drin hatte.

// der zu kontaktierende Host
String host = "xxx.xxx.xxx.xxx";
int port = 80;

// unser Proxy
String proxyHost = "xxx.xxx.xxx.xxx";
int proxyPort = 8080;

// put properties
System.setProperty("socksProxyHost", proxyHost);
System.setProperty("socksProxyPort", String.valueOf(proxyPort));

// set up proxy
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyHost, proxyPort));

// set up socket
socket = new Socket(proxy);

// contact host
socket.connect(new InetSocketAddress(host, port));

Bekomme jedoch das selbe Resultat.
Die Zeil
// contact host
socket.connect(new InetSocketAddress(host, port));
lässt mich in den catch Zweig meiner trxy{}catch{} kommen.

Weis da wer Rat?

Danke schon mal!
 
Würde es denn funktionieren das ganze auch auf URL-Verbindung auf zu bauen? Dann also mit https oder http.

Oder muss man für Client-Server Programme nen Socket nehmen?

Es können sich mehrere Clients gleichzeitig verbinden. Wie gesagt ich bin noch nicht so tief in der Materie drin... .
Daher frage ich hier :).

Sicher ist aber, dann werde ich nicht nur Client sondern auch Server umbauen müssen.

Kennt sich hier wer aus, was da warum Sinnvoller ist?
Die Software soll nachher über diese Ports laufen, da die sich oft durch administrativ geschütze Systeme verbindet, bei denen die EDV und schwere Probleme bereitet.

Danke schon mal!
 
Zurück