Proxy ohne speziellen Host?

Extremefall

Mitglied
Hallo,
ich habe folgendes vor:
Ich will einen Proxy in JAVA schreiben. Dieser soll dann z.B. die URL vom Browser abfangen, die angesurft wird. Das Internet soll allerdings trotz Proxy normal erreichbar sein. Wie kann ich es also hinbekommen, dass das Internet mit einem Proxy in Java genauso ist, als wenn ich keinen Proxy benutze? Wonach müsste ich da suchen? Habt ihr eventuell geeignete Tutorials zur Hand? Könnt ihr mir helfen?

MfG
 
Ähäm WAS genau hast du jetzt vor ?
Sorry wenn es andere verstehen aber es mir nicht ersichtlich wird aber entweder stellst du deinen Browser darauf ein das er über deinen Proxy geht oder nicht. Eine weitere Möglichkeit *allerdings sehr kompliziert* wäre das du einen ServerSocket startest und dann im Browser 127.0.0.1 ansurfst und dann über diese Connection auf halt nur genau diese Daten zugreifen kannst ... weil dann an localhost noch einen komplizierten Script-Aufruf mit Ziel-Angabe ... das ist dann doch ziemlich schwierig.
 
Naja, also um die Einstellung des Proxies in deinem Browser kommst du wohl kaum herum.
Aber der Proxy selbst ist relativ leicht programmiert. Du musst nur die HTTP(S)-Anfragen lesen, an den InternetServer weiterreichen und dann die Antwort wieder an den Client zurückschicken. Dieses kleine Programm hier gibt dir z.B. Stumpf die HTTP-Anfrage aus die du über deinen Browser sendest wenn du localhost und Port 19192 als Proxy eingestellt hast:

Java:
import java.util.Scanner;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.InputStream;
import java.io.IOException;

public class ProxyRequestReader
{
    public static void main(String[] args) {
        try {
            ServerSocket sSock = new ServerSocket(19192);
            Socket sock = sSock.accept();
            InputStream in = sock.getInputStream();
            Scanner sc = new Scanner(in);
            while(sc.hasNextLine()) {
                System.out.println(sc.nextLine());
            }
            sock.close();
        }
        catch(IOException ioex) {
            ioex.printStackTrace();
        }
    }
}
 
Zuletzt bearbeitet:
Leider dauert es bei mir ewig, bis die Seite aufgerufen wird. Wie kann man so etwas verhindern? Das Internet soll möglichst normal funktionieren und auch eine gute Geschwindigkeit beim Seitenaufruf haben, ähnlich wie ohne Proxy.
 
Zuletzt bearbeitet:
Leider weiß ich nicht, wie ich das ganze bewerkstelligen kann.

Mein Code sieht ähnlich aus, wie der oben genannte:
Java:
import java.net.Socket;
import java.net.ServerSocket;
import java.io.InputStream;
import java.io.IOException;
 
public class ProxyServer
{
    public static void main(String[] args) throws Exception{
            ServerSocket socketserver= new ServerSocket(8080);
            Socket socket = socketserver.accept();
            InputStream eingang = socket.getInputStream();
    }
}

Ich wäre für weitere Hilfe dankbar. Könntet ihr mir helfen, wie ich über einen Socketserver erst einmal eine Verbindung mit dem Internet aufbauen kann?
 
Ich weise noch mal auf meine Frage oben hin : WAS genau hast du vor ? Weil weder aus dem Thread-Title noch aus deinen bisheringen Posts konnte ich herauslesen was genau du nun machen willst ... bitte beschreibe dein "Problem" etwas deutlicher.
 
Ich habe folgendes vor:
Ich möchte einen Websitefilter bauen. Der Proxy soll dafür agieren.
Ich habe es mir so vorgestellt:
Pc - Proxy - Internet
Der Proxy soll die folgenden Aufgaben erfüllen:
- eine normale Nutzung des Internets mit dem Browser und Proxy
- die URL aus dem Browser empfangen bzw. abfangen
- die URL eventuell ändern

Weißt du jetzt, was ich vor habe? Wozu hast du noch fragen?
 
Hi Extremefall,

Ich denk mal, du willst einfach eine durchleitung aller Browser-Eingaben an den jewailige Server.?

Hier jetzt aber erstmal ein Beispiel wie man mit Hilfe von Thrads belibig viele Request gleichzeitig empfangen kann:

Java:
package de.tutorials.proxy;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class ProxyRequestReader {
	
    public static void main(String[] args) {
    	try{
            ServerSocket sSocket = new ServerSocket(19192);
            // Es werden in Endloschleife Verbindungsanfragen auf Post 9192 akkzeptiert
            while(true){
            	// nebenläufiger Prozess ließt jedes Mal den Header aus
                Socket socket = sSocket.accept();
                (new ProxyThread(socket)).start();
            }
        }
        catch(IOException ex){
        	System.err.println(ex.toString());
        }
    }
    
}

Thrad-Klasse:
Java:
package de.tutorials.proxy;

import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class ProxyThread extends Thread {
	
	private Socket socket;
	
	public ProxyThread(Socket s) {
		socket = s;
	}
	
	@Override
	public void run() {
		try {
			Scanner sc = new Scanner(socket.getInputStream());
            while(sc.hasNextLine()) {
                System.out.println(sc.nextLine());
            }
            socket.close();
        }
        catch(IOException ex) {
        	System.err.println(ex.toString());
        }
    }

}

Wegen der Langsamkeit des Browsers:
Natürlich wartet er ewig auf eine Antwort des Servers, die konnt aber nicht, da du ja deine Proxie und keinen Web-Server ansprichst, die Anfragen verschiedener Browser(-instanzen) bzw. Tabs printet er aber sofort!

Wenn du nochmal etwas genauer erklärst was dein ziel ist, helfe ich dir auch gerne noch mehr,

javaDeveloper2011
 
Hi nochmal,

wir haben wohl im gleichen Moment gepostet, deshalb noch meine Fragen.
Eine wahrscheinich unpraktische Lösung die aber zumindest die Seite aufrufen würde wäre:

Java:
package de.tutorials.proxy;

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class DesktopTut {

	public static void main(String[] args) {
		Desktop desktop = Desktop.getDesktop();;
		try {
			desktop.browse(new URI("www.google.de"));
		} 
		catch (IOException e) {
			e.printStackTrace();
		} 
		catch (URISyntaxException e) {
			e.printStackTrace();
		}
	}

}

Ich hoffe du kannst was damit anfangen,
javaDeveloper2011
 
Zurück