PROJET PROXY / WGET
 
 
 

Projet réalisé par  Gilles DUPONT & Patrice RIBERO
 

Présentation
Détails techniques
Améliorations possibles
Installation / Execution
Télécharger archive du projet

Présentation
Le but de ce projet etait de réaliser un proxy qui effectue des téléchargements par la commande WGET, de fichiers d'un format prédéfini.
Ceci ayant comme principal interêt de pouvoir effectuer des téléchargements de gros fichiers, sans pour autant attendre la fin du téléchargement pour pouvoir quitter Netscape et se delogger, tout en allégeant la charge de Netscape. Mai aussi, il fournit une interface graphique pour configurer la commande WGET et aussi une page contenant la liste des téléchargements effectués ou en cours avec la possibiltié de les arrêter.

Nous avons développé notre proxy en C, pour des raisons de performances. Il est multi-threads, ce qui permet à la fois d'y accéder concurremment et aussi de le rendre plus "léger" au niveau de l'espace mémoire, qu'un proxy multi-processus, du fait de la non duplication de l'espace mémoire. Il est possible de le configurer par un fichier texte : proxy.config. Dans ce fichier, on peut spécifier le type MIME ou l'extension des fichiers que l'on veut télécharger par le proxy.
Exemple d'un fichier proxy.config :
 



 











Ainsi, lorsqu'un fichier de type spécifié dans proxy.config "passe" par le proxy, celui-ci propose au client (le browser) une interface graphique pour configurer la commande WGET:
 


 
 
 

 Cette interface, même si elle est partielle, permet notament de spécifier le lieu de téléchargement du fichier, permet de fixer le nombre de tentatives de téléchargement en cas d'échec (interruption de la connexion, fréquent dans le cas de téléchargement de trés gros fichiers) et aussi permet de reprendre un téléchargement qui avait été interrompu.
 

Une fois configuré, le proxy effectue le téléchargement du fichier par la commande WGET avec les options spécifiées. La commande WGET est éxécutée dans un autre processus, ceci permettant de télécharger en parallèle plusieurs fichiers.

Il est aussi possible de s'adresser directement au proxy à l'URL: "http://PROXY", afin d'obtenir la liste des téléchargements effectués ou en cours :
 

 
 
 

Cette page fournit l'état des téléchargement:

       téléchargement terminé
        tléchargement en cours

Elle spécifie aussi le nom sous lequel le fichier a été téléchargé et l'URL, la taille du fichier téléchargé. Elle fournit l'état d'avancement (en pourcentage) du téléchargement, et son heure de début et de fin (si il est terminé).
A partir de cette page, il est aussi possible d'arrêter un téléchargement en cours ou  encore de supprimer une ligne de la liste des téléchargements. Ce dernier ayant pour effet de supprimer uniquement le fichier comportant l'avancement du téléchargement  et non le fichier téléchargé. Ceci s'effectue en cochant les "checkboxes" associées aux fichiers :
 

 
 

Grace à une option de compilation, il est aussi possible d'utiliser le proxy pour tracer le protocol HTTP.
 
 

Détails techniques
-Nous avons utilisé des CGI ecrits en C à la fois pour traiter les réponses des formulaires, mais aussi pour pouvoir faire passer des pages au browser. En effet, lorsque le browser demande une page dont le type est spécifié dans le fichier de config, alors le proxy lui retourne une page proposant de configurer graphiquement WGET. Une fois configuré, pour signifier (par une page html) au browser que le wget est lancé, il faut faire passer cette page par le CGI. Car le browser apres avoir recu la page de congfig de WGET a fermé le socket, donc le proy ne peut plus rien lui envoyé!
Nous avons utilisé pour les CGI la librairie CGIC de Thomas Boutell.
-Le proxy est donc accessible de 3 manières:
    -par le browser, pour une requete HTTP
    -directement, par l'URL "http://PROXY", afin d'obtenir la liste des téléchargement
    -par le CGI, c'est le CGI qui lui indique quels téléchargement il faut arrêter
-Pour gérer la liste des downloads, la sortie standard de WGET est redirigée à chaque fois dans un fichier différent : resultX . Ce sont ces fichiers qui sont parsés pour obtenir les informations ci-dessus. Ces fichiers sont gérés dans une liste dynamique, ce qui permet d'avoir aucune limitation sur le nombre de téléchargement.
 

Améliorations possibles
-Nous avons passé beaucoup de temps sur la simple mise au point du proxy et donc peu de temps sur la partie interface. C'est pourquoi l'interface graphique n'est pas très léchée et mériterait d'être améliorer.
-L'interface de configuration de WGET pourrait aussi être complétée, en ajoutant notament plus d'options.
-De plus nous avons essayé, en vain, de fournir la possibilté à l'utilisateur de refuser le téléchargement et d'obtenir ainsi dans le browser la page demandée, même si le type de cette dernière figurée dans le fichier dans de config. Tout le traitement dans le proxy est fait : sauvegarde en global de l'entete du fichier, récupération auprès du serveur HTTP du reste de la réponse, ... Cependant nous ne sommes pas parvenus a faire transiter la page par le CGI: problèmes de lecture et d'écriture dans les sokets au niveau du CGI ?!???!!!.
 
 

Installation / Execution
Des CGI:
-Il faut indiquer en dur dans les CGI "download.cgi" et "suppr.cgi", l'adresse et le port de la machine sur laquelle va tourner le proxy. C'est pourquoi, afin de pouvoir modifier les fichiers .c correspondants, vous devez faire une copie dans votre répertoire "www/local"  des fichiers "suppr.c" et "download.c". Vous devez modifier les 2 macros definissant le PORT et le HOST et recompiler ces 2 fichiers à l'aide du makefile. De plus, il faut renommer les éxécutables en "suppr.cgi" et "download.cgi" ( ex "mv suppr suppr.cgi").
-Comme l'adresse des CGI a été modifiée (ils sont chez vous, à présent! ), il faut modifier les 2 formulaires leur faisant appel, en mettant juste votre adresse.

Du Proxy:
-Compilation: un makefile permet de compiler le proxy avec différentes options possibles, debugger, tracer le protcole HTTP, make clean, make pack (poour réaliser une archive) ...
-Execution du proxy en spécifiant un numéro de port: "nohup mprox 8080"
-Configuration de Netscape: dans le menu Edit/preferences/Advanced/Proxies , cliquez sur "manual proxy configuration" et "view". Pour le champs HTTP proxy donner le nom de la machine et le port sur lequel tourne votre proxy: "foc.essi.fr"  "8080" . Et pour le champs "No Proxy for" ajouter "www-local.essi.fr", car un problème d'autorisation empêche notre proxy d'acceder aux CGI developpés en local.
 
 

Tout est fin prêt, Bon téléchargement !