|
|
|
|
public class PServer {
final static int localport = 8080;
public static void main(String[] args) throws IOException {
ServerSocket serveur = null;
try{
serveur = new ServerSocket(localport);
System.out.println("Serveur proxy démarré sur le port " + localport);
// Ecoute infinie des requêtes des clients
while(true){
Socket client = serveur.accept();
Clients c = new Clients(client);
}
}
catch (Exception e){System.err.println(e);}
finally{
try{
if (serveur != null) serveur.close();
}
catch (Exception e){System.err.println(e);}
}
}
} // ! PServ class
class Clients extends Thread {
private Socket client;
private String url;
private URL Url;
private InputStream sin;
private OutputStream sout;
public Clients(Socket client){
try{
this.client = client;
start();
}
catch (Exception e){System.err.println(e);}
} // !constructeur
public void run(){
try{
sin = client.getInputStream();
BufferedReader from_client = new BufferedReader(new InputStreamReader(sin));
sout = client.getOutputStream();
byte [] buffer = new byte[4096];
int lus;
String tmp;
String requete = "";
int position;
boolean fini = false;
int cpt = 0;
// Lecture de l'url que le client demande
while (((tmp = from_client.readLine()) != null) && !fini){
System.out.println(tmp);
//System.out.println((tmp != null) && !fini);
//System.out.println("ICI" + tmp.trim().toUpperCase());
if (tmp.trim().toUpperCase().startsWith("GET")) {
position = tmp.trim().toUpperCase().lastIndexOf("HTTP") > 0 ? tmp.toUpperCase().lastIndexOf("HTTP") : tmp.length();
url = tmp.trim().substring(3,position).trim();
requete = requete + tmp;
//System.out.println("URL :" + url);
//fini = true;
}
// il faut recuperer le User-Agent et le Host
String regex = "^User-Agent: +(.*\\))$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(tmp);
while (m.find()){
requete = requete + m.group(0);
/*for (int i=0; i <= m.groupCount(); i++){
System.out.println("Groupe " + i + " : " + m.group(i));
}*/
}
String regex2 = "^Host: +(.*)";
Pattern p2 = Pattern.compile(regex2);
Matcher m2 = p2.matcher(tmp);
while (m2.find()){
requete = requete + m2.group(0);
/*for (int i=0; i <= m2.groupCount(); i++){
System.out.println("Groupe " + i + " : " + m2.group(i));
}*/
}
cpt++;
//System.out.println(cpt);
if (cpt >= 5) {
fini = true;
//System.out.println("fini" + fini);
//System.out.println("URL ?" + url);
}
//System.out.println("URL ? " + url);
//System.out.println("la requete envoyée au serveur : " + requete);
}
// création d'une connexion sur le serveur http cible
System.out.println("Url demandée : " + url);
//appel à la classe proxyClient
proxyClient p = new proxyClient(client, requete, url);
/*URL Url = new URL(url);
InputStream httpin = Url.openStream();
while( (lus = httpin.read(buffer)) != -1) sout.write(buffer,0,lus);
httpin.close();
client.close();*/
}
catch (Exception e){System.err.println(e);}
} // ! run() method
} // ! Clients class
class proxyClient extends Thread {
private Socket client;
private String requete;
private String url;
public static int port = 8080;
public static String host = "localhost";
public proxyClient(Socket client, String requete, String url){
try{
this.client = client;
this.requete = requete;
this.url = url;
start();
}
catch (Exception e){System.err.println(e);}
} // !constructeur
public void run(){
String tmp = "";
int position;
int count=-1;
try {
/*URL Url = new URL(url);
InputStream httpin = Url.openStream();
while( (lus = httpin.read(buffer)) != -1) sout.write(buffer,0,lus);
httpin.close();*/
Socket socket = new Socket(InetAddress.getByName(host),port);
System.out.println("socket créé");
socket.close();
client.close();
}
catch (Exception e){System.err.println(e);}
} // ! run() method
} // ! proxyClient class
Le Host, c'est ce que demande le client dans l'entête HTTP:
Exemple: GET /articles/index.shtml HTTP/1.0 User-Agent: Mozilla 4.0 (X; I; Linux-2.0.35i586) Host: www.perlfect.com Accept: image/gif, image/jpeg, */* Tu dois donc te connecter sur www.perlfect.com sur le port 80 (puisqu'aucun port n'est précisé), et envoyer la requête tel quel au serveur. |
C'est ce que j'avais fait pour tester.
J'ai mis www.kochonland.com comme host et 80 comme port. J'obtiens une erreur java.net.ConnectException: Connection refused Qu'est-ce que je peux faire ? |
En fait ça a l'air de marcher à peu près maintenant.
Mais comment je fais pour lire ce que renvoie le serveur et le renvoyer au client ? |
Pour lire la socket, je fais ça :
Socket socket = new Socket(InetAddress.getByName(url),port);
System.out.println("socket créé");
sin = socket.getInputStream();
BufferedReader from_Web = new BufferedReader(new InputStreamReader(sin));
sout = socket.getOutputStream();
byte [] buffer = new byte[4096];
int lus;
boolean fini = false;
// Lecture de la réponse
while (((tmp = from_Web.readLine()) != null) && !fini){
System.out.println("tmp" + tmp);
}
socket.close();
client.close();
Mais le from_Web.readLine est vide ! Et la page web ne s'affiche pas... Est-ce que quelqu'un voit le problème dans mon code ? Merci |
Je viens de remarquer que le from_Web.readLine() est "bloqué".
while (((tmp = from_Web.readLine()) != null) && !fini){
System.out.println("tmp" + tmp);
fini = true;
}
System.out.println("sortie");
Le programme ne rentre pas dans la boucle (pas d'affichege de tmp) mais il n'en sort pas non plus (pas d'affichege de sortie). Comment je peux faire ? Aidez-moi s'il vous plait, je deviens folle!! ;-)
|
Mais après quand l'url est par exemple www.kochonland.com/bloque_f5.j , j'obtiens une erreur java.net.UnknownHostException: www.kochonland.com/bloque_f5.j
Il faut se connecter uniquement sur le host (www.kochonland.com) Et après, seulement, envoyer la requête HTTP. Voir: http://www.sebsauvage.net/comprendre/url/ |
stp,je veux savoir comment récupérer le proxy host et le proxy port de mon PC. |
"stp,je veux savoir comment récupérer le proxy host et le proxy port de mon PC."
Mauvaise question. Ton PC n'as pas de proxy host et de proxy port. Tes connexions peuvent éventuellement en avoir. Mais ca dépend de la configuration des programmes que tu utilises aller sur le(s) réseau(x), chaque programme ayant sa propre configuration et donc potentiellement un (ou plusieurs) proxy host différent(s). Ton PC possède probablement une seule adresse IP par contre (bien qu'il soit possible d'en avoir plusieurs à la fois) mais elle change probablement à chaque fois que tu relance ton modem (ou équivalent). Il possède vraisemblablement quelques dizaines de millliers de ports utilisables (enfin si aucun firewall ne s'en mêle). Bref, mauvaise question. |
| 26/09 11h31 | Java Runtime Machine | Navigateurs |
| 05/11 11h45 | [Javascript] Date de dernière modification | Javascript |
| 05/11 11h52 | [Javascript] Effacer un champ de formulaire lors du clic (focus) | Javascript |
| 08/11 10h32 | [Javascript] Lien aléatoire / Choisir un lien au hasard | Javascript |
| 24/11 13h49 | 2 bons livres pour Java et C++ | Langages |
| 23/11 15h25 | Proxy java pour insérer script | 0 |
| 21/04 14h35 | Je veux faire un proxy en Java ? | 1 |
| 10/05 16h57 | Comment etablir un proxy en java? | 0 |
| 03/04 13h41 | Configuration PROXY pour JAVA SUN & IE6 | 2 |
| 29/01 22h22 | Proxy sur java | 0 |
![]() | Java Runtime Environment - Java Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des... | Catégorie: Java Licence: Open Source |
![]() | AnalogX Proxy - AnalogX Proxy est un serveur proxy très léger (238 ko), qui permet à toutes les machines de votre réseau d'avoir l'accès à... | Catégorie: Serveurs Licence: Freeware/gratuit |
![]() | Java Tools - Java Tools est un IDE très léger pour la création, la compilation, l'exécution et le débogage des applications Java et des... | Catégorie: Java Licence: Freeware/gratuit |
![]() | JAP - JAP (Java Anon Proxy) est un outil développé en Java, donc multi-plateformes, permettant de gérer une liste de proxies en... | Catégorie: Anonymat/Confidentialité Licence: Freeware/gratuit |
![]() | Cabasse JAVA MT4 Cherry | Catégorie: Enceintes | 1,475.00 € PriceMinister |
![]() | Cabasse JAVA MT4 Beige | Catégorie: Enceintes | 1,475.00 € PriceMinister |
![]() | Cabasse JAVA MT4 Black | Catégorie: Enceintes | 1,499.00 € Son-Vidéo |
![]() | sun Java Workstation W1100z | Catégorie: Ordinateur de bureau |