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