# Java Proxyserver schreiben?



## Extremefall (10. Mai 2011)

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.


----------



## MiDniGG (10. Mai 2011)

Naja. Da spuckt doch google recht viel aus...

java proxy server - Google-Suche

Bei mir klingen die Links 3 und 5 recht interessant.


----------



## Extremefall (10. Mai 2011)

Ich habe nun ein Tutorial mit Code auf der Seite von java2s.com gefunden:

```
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.


----------



## maki (10. Mai 2011)

*verschoben*

Proxy ist ein Netzwerkthema...


----------



## ARadauer (10. Mai 2011)

Extremefall hat gesagt.:


> Was muss ich dort als Proxynamen und was als Port genau eingeben?


ich vermute mal stark, localhost:8080


----------



## Extremefall (10. Mai 2011)

Dann erhalte ich folgenden Fehler:

```
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?


----------



## ARadauer (10. Mai 2011)

Extremefall hat gesagt.:


> Oder woran liegt es wohl?


Daran, dass es extremefallsproxy.de nicht gibt? Wieso leitest du den request an diese url weiter?
Was soll dein proxy genau machen?
Und wenn du das nicht weißt, warum schreibst du dann einen proxy?


----------



## Extremefall (10. Mai 2011)

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.


----------



## ARadauer (10. Mai 2011)

Extremefall hat gesagt.:


> 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:


----------



## Extremefall (10. Mai 2011)

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.


----------



## XHelp (10. Mai 2011)

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


----------



## ARadauer (10. Mai 2011)

> 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


----------



## Extremefall (16. Mai 2011)

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?


----------



## XHelp (16. Mai 2011)

Ich zitiere mich mal selber :bahnhof:


XHelp hat gesagt.:


> 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


----------



## ARadauer (16. Mai 2011)

Extremefall hat gesagt.:


> 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?



nein


----------



## Extremefall (17. Mai 2011)

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?


----------



## XHelp (17. Mai 2011)

Extremefall hat gesagt.:


> 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?



So wie du es geschrieben hast. Hast du irgendwelche *konkrete* Fragen, nach dem du dich schon selber intensiv damit befasst hast?


----------



## Extremefall (17. Mai 2011)

Die Frage ist, wie ich trotz Proxy erst einmal das Internet normal nutzen kann. Ist so etwas möglich? Welchen Host müsste man angeben?


----------



## XHelp (17. Mai 2011)

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.


----------



## Extremefall (17. Mai 2011)

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?


----------

