Bonjour,
Alors pour comprendre comment ça fonctionne j'essaye de développer un petit serveur proxy qui serait l'intermédiaire entre mon navigateur et internet. Le but étant de faire pointer mon navigateur vers mon petit programme et que celui-ci redirige le trafique vers l'extérieur tout en sniffant ce qui passe et en me retournant des logs.
Donc j'ai fait quelques recherches et j'ai trouvé des exemples de code intéressant et je suis arrivé à créer deux petites classes qui fonctionnent sauf que j'ai un soucis de paramétrage car c'est pas hyper claire pour moi.
Voici le code :
La classe Proxy
La classe Oneserver
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class Proxy { public static final int PORT = 12345; public static void main(String args[]) throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("Started " + s); try { while ( true ) { Socket socket = s.accept(); try { System.out.println( "connection acceptee " + socket); new OneServeur(socket); } catch ( IOException e ) { socket.close(); } } } finally { s.close(); } } }
Donc en gros je lance le main et je configure par exemple Firefox pour qu'il se connect sur le serveur proxy localhost avec le port 12345.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 class OneServeur extends Thread{ private Socket socket, socketToWeb; private BufferedReader fromBrowser; private PrintWriter toBrowser; private PrintWriter toWeb; private BufferedReader fromWeb; public OneServeur(Socket s) throws IOException { socket = s; fromBrowser = new BufferedReader( new InputStreamReader ( socket.getInputStream())); toBrowser = new PrintWriter( new BufferedWriter ( new OutputStreamWriter ( socket.getOutputStream())),true); start(); } public void run() { try { String str, targetHost="", httpHeader=""; while(true) { str = fromBrowser.readLine(); httpHeader += str + "\n"; if ( str.startsWith("Host: " ) ) targetHost = str.substring(6); if ( str.length() == 0 ) break; } //socketToWeb = new Socket(InetAddress.getByName(targetHost),80); socketToWeb = new Socket( InetAddress.getByName("monproxy"),monport); System.out.println(socketToWeb); fromWeb = new BufferedReader( new InputStreamReader ( socketToWeb.getInputStream())); toWeb = new PrintWriter( new BufferedWriter ( new OutputStreamWriter ( socketToWeb.getOutputStream())),true); System.out.println("-> -> -> -> -> -> -> \n" + httpHeader); toWeb.println(httpHeader); boolean echoing = true; while ( true ) { str = fromWeb.readLine(); if ( str == null ) break; if ( str.length() == 0 ) echoing = false; if( echoing ) System.out.println(str); toBrowser.println(str); } System.out.println("\nclosing ..."); } catch ( IOException e) { } finally { try { socket.close(); } catch ( IOException e ) {} } } }
Et mon soucis c'est qu'il faut que je paramètre cette ligne de code :
InetAddress.getByName("monproxy"),monport);
Et tout marche bien si j'utilise une IP/PORT d'un proxy publique que je peux trouver sur internet. Mais moi ce n'est pas ça qui m'intéresse, je voudrais que mon serveur intermédiaire forward directement via mon IP à moi sans passer par un autre intermédiaire. Comme je ne sais pas si je suis clair actuellement ce qui marche c'est ça :
Firefox<-->mon programme <--> proxy publique <--> site web
Et ce que je voudrais :
Firefox<-->mon programme <--> site web
Je suis derrière une freebox en mode routeur avec plusieurs machines derrière et je voudrais savoir comment faire pour que ça marche ?
Merci
n'hésitez pas à me demander plus de précisions si je ne suis pas clair![]()
Partager