Java Proxy-Server

dot-paul

Grünschnabel
Hallo,

Ich möchte gerne einen einfachen und primitiven Java-Proxy Server basteln (ich weiß, es gibt bereits genügend andere Proxys...).

Ich habe dazu recht lange gegoogelt und habe unten angegebenen Code dazu gefunden.

Eigentlich recht einleuchtend, funktioniert auch recht schön, allerdings nicht mit allen Webseien (ebay z.b. geht nicht). Liegt es evtl an Sessions?

Wer das mal ausprobieren muss, startet den Code, und trägt z.b. im Internetexplorer als proxy den eigenen Host ein, Proxyport = 80.

Funktioniert auch für andere Rechner im LAN. Es muß nur der eine Rechner, der den Proxy laufen hat über einen Internetanschluß verfügen.

Meine Frage: Wie kann ich den Proxy erweitern, dass er mir alle Sites anzeigt?

Code:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class miniprox extends Frame{
  public final static int http_port = 80;
  static int zaehler=0;
  final static String crlf="\r\n";
  static TextArea ta;
  public miniprox(String s)       {
      super(s);
      this.addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){
           dispose();
           System.exit(0);
        }
     });
     setLayout(new FlowLayout());
     add(ta=new TextArea(20,70));
     setBackground(Color.lightGray);
  }
  public static void main(String argv[]){
    miniprox f = new miniprox("miniproxy");
    f.setSize(600,400);
    f.show();
    try{
       ServerSocket httpsocket = new ServerSocket(http_port);
       ta.setText("Server gestartet -- "+httpsocket.getInetAddress()+crlf);
       for(;;){
                cServer anfrage = new cServer(f,httpsocket.accept());
                zaehler++;
                ta.append("Anfrage #: "+zaehler+" Threads: "+anfrage.activeCount()+crlf);
       }            
    }
   catch(IOException ioe){ta.append("Fehler: "+ioe.toString()+crlf);}
  }
}
class cServer extends Thread{
  final String crlf="\r\n";
  protected Socket client;
  TextArea te;
  public cServer(miniprox f,Socket client){
        this.client=client;
        this.start();
        te=f.ta;
  }
  public void run(){
     try{
       te.append(""+client+crlf);
       BufferedReader is = new BufferedReader( new InputStreamReader(client.getInputStream()));
       String anfrage = is.readLine();
       te.append(anfrage+crlf);
       Socket inethost=new Socket(hostadresse(anfrage),80);
       PrintWriter inetos=new PrintWriter(inethost.getOutputStream());
       inetos.println(anfrage+crlf);
       inetos.flush();
       DataInputStream inetis=new DataInputStream(inethost.getInputStream());
       DataOutputStream os = new DataOutputStream(client.getOutputStream());
       byte[] puffer = new byte[1024];
       int zdb;
       while((zdb=inetis.read(puffer,0,1024))!=-1){os.write(puffer,0,zdb);}
       is.close();
       os.close();
       client.close();
       inetis.close();
       inetos.close();
       inethost.close();
     }
    catch(IOException ioe){te.append("Fehler: "+ ioe.toString()+crlf);}
   }

   String hostadresse(String anfrage){
      String host;
      final String anfa="://",anfe=" HTTP";
      int lanfa=anfa.length();
      int offsa=anfrage.indexOf(anfa)+lanfa;
      int offse=anfrage.indexOf(anfe);
      String hostundpfad=anfrage.substring(offsa,offse);        
      int trennung=hostundpfad.indexOf("/");
      if(trennung== -1) host=hostundpfad;
      else host=hostundpfad.substring(0,trennung);
      return host;
   }
 }
 
dot-paul hat gesagt.:
Hallo,
Ich möchte gerne einen einfachen und primitiven Java-Proxy Server basteln (ich weiß, es gibt bereits genügend andere Proxys...).

Eigentlich recht einleuchtend, funktioniert auch recht schön, allerdings nicht mit allen Webseien (ebay z.b. geht nicht). Liegt es evtl an Sessions?

Kann ich nicht genau sagen, aber es gibt einige Sites, z.B. bei parsimony (probier mal http://www.computerschach.de/forum), die ich auch mit JAP nicht angezeigt bekomme. Ich vermute die haben eine Liste bekannter Anonymizer und blocken sie einfach.
 
Hmmm...

Wieso Anonymizer? Ich habe doch den proxy bei mir lokal. D.h., die dürften garnicht mitbekommen, dass ich über einen Proxy komme.

Das Javaprogramm arbeitet ja in meinem Netzwerk, und ist nach aussen ganz normal über t-online am Internet.

Gruss

--dot-paul
 
Zurück