Créer un proxy personnalisé avec launchd (1/2)

Pourquoi un proxy personnalisé ?

De temps en temps, on aimerait modifier pour son confort personnel des flux de données que l'on ne maîtrise pas. Ces derniers jours par exemple, j'ai été confronté à un flux RSS qui ne contient pas toutes les données dont j'ai besoin. J'ai donc créé un proxy HTTP personnalisé pour enrichir le flux RSS et obtenir un résultat complètement satisfaisant.
On peut bien sûr appliquer le même principe à tout un tas de choses. Le gros avantage de l'opération, c'est que l'on est libre de coder avec le langage de son choix, sans se compliquer la vie : launchd prend en charge la partie "réseau local" et les préférences système s'occupent de publier les réglages de proxy auprès des clients. Il ne reste finalement à s'occuper que de la partie intéressante du code : la transformation des données reçues (ou envoyées).

Schema de l'architecture logique du proxy personnalisé

Vue d'ici, la partition peut sembler complexe à jouer : il faut faire communiquer un client avec un serveur au travers d'un proxy lancé à la demande par launchd, le tout en s'appuyant sur les préférences système de proxy. Il y a donc quelques pré-requis de base. Il faut que la version de Mac OS X supporte la configuration automatique de proxy (testé sur 10.5 et 10.6). Et il faut aussi que le client supporte l'utilisation des proxy définis dans les préférences système.

Configurer les préférences de proxy de Mac OS X.

Il s'agit de ne pas de faire passer tout le trafic au travers de notre script maison, mais seulement des requêtes bien particulières. On utilise pour cela les préférences de configuration automatique de proxy. La configuration automatique de proxy s'appuie sur un fichier en javascript, qui fournit les règles de proxy que l'on souhaite utiliser. Normalement ce fichier est distribué automatiquement via DHCP, ou mis à disposition sur le réseau via une URL standardisée. Ici, nous allons procéder à la main.
La première étape consiste à créer un fichier PAC contenant les règles souhaitées. C'est un simple fichier texte. Voici le contenu du fichier "proxy.pac" que j'ai créé pour répondre à mes besoins :

function FindProxyForURL(url, host) {
      if (shExpMatch(url, "*cfsl.net/forum*/feed.php*"))    {
         return "PROXY localhost:8080";
      } 
      // All other requests go directly to the WWW:
      return "DIRECT";

Le fichier décrit les règles suivantes :
- si l'URL que je demande contient *cfsl.net/forum*/feed.php*, alors utilise le proxy à l'adresse localhost:8080.
- dans tous les autres cas, n'utilise pas de proxy.

Vous trouverez d'autres exemples de fichiers PAC sur wikipedia et ailleurs.

La seconde étape est l'activation de ces règles dans les préférences système. Il faut pour cela ouvrir les préférences réseau, et entrer dans les paramètres avancés de l'interface réseau active. Sous l'onglet "Proxy", on retrouve une case à cocher correspondant au mécanisme de configuration automatique de proxy. Il faut cocher cette case, et désigner le chemin du fichier PAC créé à la première étape :

Et voilà, maintenant il ne reste plus qu'à créer le programme de proxy et son plist de lancement.
Lire la suite !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.