Java Proxyserver schreiben?

Extremefall

Bekanntes Mitglied
Hallo,
ich würde gerne eine Proxyserver schreiben, welcher die URL von dem Browser erhalten und verändern kann. Ist so etwas? Gibt es dazu gute Tutorials? Da ich noch ziemlich neu in der Materie bin, wäre ich für Hilfe dankbar.
 
Ich habe nun ein Tutorial mit Code auf der Seite von java2s.com gefunden:
Java:
import java.io.*;
import java.net.*;

public class SimpleProxyServer {
  public static void main(String[] args) throws IOException {
    try {
      String host = "extremefallsproxy.de";
      int remoteport = 100;
      int localport = 8080;
      // Print a start-up message
      System.out.println("Starting proxy for " + host + ":" + remoteport
          + " on port " + localport);
      // And start running the server
      runServer(host, remoteport, localport); // never returns
    } catch (Exception e) {
      System.err.println(e);
    }
  }

  /**
   * runs a single-threaded proxy server on
   * the specified local port. It never returns.
   */
  public static void runServer(String host, int remoteport, int localport)
      throws IOException {
    // Create a ServerSocket to listen for connections with
    ServerSocket ss = new ServerSocket(localport);

    final byte[] request = new byte[1024];
    byte[] reply = new byte[4096];

    while (true) {
      Socket client = null, server = null;
      try {
        // Wait for a connection on the local port
        client = ss.accept();

        final InputStream streamFromClient = client.getInputStream();
        final OutputStream streamToClient = client.getOutputStream();

        // Make a connection to the real server.
        // If we cannot connect to the server, send an error to the
        // client, disconnect, and continue waiting for connections.
        try {
          server = new Socket(host, remoteport);
        } catch (IOException e) {
          PrintWriter out = new PrintWriter(streamToClient);
          out.print("Proxy server cannot connect to " + host + ":"
              + remoteport + ":\n" + e + "\n");
          out.flush();
          client.close();
          continue;
        }

        // Get server streams.
        final InputStream streamFromServer = server.getInputStream();
        final OutputStream streamToServer = server.getOutputStream();

        // a thread to read the client's requests and pass them
        // to the server. A separate thread for asynchronous.
        Thread t = new Thread() {
          public void run() {
            int bytesRead;
            try {
              while ((bytesRead = streamFromClient.read(request)) != -1) {
                streamToServer.write(request, 0, bytesRead);
                streamToServer.flush();
              }
            } catch (IOException e) {
            }

            // the client closed the connection to us, so close our
            // connection to the server.
            try {
              streamToServer.close();
            } catch (IOException e) {
            }
          }
        };

        // Start the client-to-server request thread running
        t.start();

        // Read the server's responses
        // and pass them back to the client.
        int bytesRead;
        try {
          while ((bytesRead = streamFromServer.read(reply)) != -1) {
            streamToClient.write(reply, 0, bytesRead);
            streamToClient.flush();
          }
        } catch (IOException e) {
        }

        // The server closed its connection to us, so we close our
        // connection to our client.
        streamToClient.close();
      } catch (IOException e) {
        System.err.println(e);
      } finally {
        try {
          if (server != null)
            server.close();
          if (client != null)
            client.close();
        } catch (IOException e) {
        }
      }
    }
  }
}

Der Server scheint zu laufen. Nur wie kann ich nun den Proxy mit dem Browser nutzen? Was muss ich dort als Proxynamen und was als Port genau eingeben? Es klappt irgendwie einfach nicht.
 
Dann erhalte ich folgenden Fehler:
Java:
Proxy server cannot connect to extremefallsproxy.de:100:
java.net.ConnectException: Connection refused: connect
Ich habe den Proxyserver in Eclipse ausgeführt. Kann der Fehler damit zusammenhängen? Oder woran liegt es wohl?
 
Ich dachte, dass es sich dabei um den Namen des Proxys handelt. Kann man den Host denn einfach weglassen? Ich will mit dem Proxy folgendes machen: Die URL abfangen, die bei Firefox angesurft wird. Daher dachte ich mir, dass ein Proxy die beste Möglichkeit wäre. Wofür steht denn der Host dann? Danke schonmal für die Hilfe.
 
Ich dachte, dass es sich dabei um den Namen des Proxys handelt.
du bist der proxy

Kann man den Host denn einfach weglassen?
wie weg lassen, das programm verbindet sich dort hin..

Ich will mit dem Proxy folgendes machen: Die URL abfangen, die bei Firefox angesurft wird. Daher dachte ich mir, dass ein Proxy die beste Möglichkeit wäre. Wofür steht denn der Host dann?
ich denke du musst aus dem request den host heraus fischen und dich dorthin verbinden. kanns aber nicht sicher sagen...
Beschäftige dich nochmal mit dem Thema, das ist etwas do sollte man schon mal 2-3 Stunden drüber lesen :rtfm:
 
Das einzige Verständnisproblem ist noch der Host. Heißt das, man verbindet sich über einen anderen Server mit dem Internet oder wie hat man sich das vorzustellen? Denn es soll ja alles normal funktionieren (also das Internet) und dabei die URL über einen Proxy abgefangen werden. Wenn ich weiß, wie ich den Host zu verstehen habe, dann wird der Rest sicherlich kein so großes Problem mehr sein.
 
Host ist eben die Seite, mit der du dich im Endeffekt verbinden möchtest. Wie du hoffentlich merkst ist hier das Problem, dass es im Code fest ist. Was du brauchst ist ein HTTP-Proxy o.ä.
Aber erstmal musst du die Theorie dahinter verstehen
 
das ist etwas do sollte man schon mal 2-3 Stunden drüber lesen
Mein Post 12:57 dein Post 13:13... naja

Heißt das, man verbindet sich über einen anderen Server mit dem Internet oder wie hat man sich das vorzustellen?
man kann sich nicht mit dem Internet verbinden! Man kann sich mit einem Rechner im Internet verbinden. Ein Proxy ist etwas was man dazwischen hängt. du gibst google.de ein, kommst aber auf dein kleines program in eclipse. dieses muss jetzt den request weiterleiten. zu einem host, wohin?... google.de
 
Ist der Host also die Seite, zu der das Request den Nutzer weiterleitet?
Also bei Host google.de im Proxy und dem Aufruf der Domain eBay.de gelangt der Nutzer zu google?
 
Ist es denn möglich, einen Proxy zu schreiben, der die Internetverbindung nicht beeinflusst. Also sodass es so läuft, wie ohne Proxy? Der Proxy soll dazu dienen, nur die Browseraktionen (z.b. die aufgerufene URL) zu erhalten und evt. den Nutzer bei bestimmten URLs weiterleiten.

Wie realisiert man dieses Vorhaben?
 
Mit dem Hinweis, den ich zum 3. mal schreibe, dass der von dir gepostete Code sich nicht für dein Vorhaben eignet, steige ich aus der Diskussion aus.
 
Dass mein Code nicht geeignet ist, habe ich verstanden. Wie würde man einen Proxy mit meinem Vorhaben bezeichnen? Ist so etwas mi einem Http Proxy möglich?
 

Zurück
Oben