Configuration automatique du proxy
La configuration proxy du navigateur peut être automatisée et rendue transparente pour les utilisateurs. Elle nécessite simplement de la part des administrateurs de réseaux la création d’un fichier spécifique de configuration.
Article d’inspiration libre à partir du site netscape proxy live [1]
Attention, cet article nécessite un prérequis sur la notion de serveur mandataire (appelé proxy ci-après) et de la programmation javascript.
Au sein de réseaux d’entreprise, il arrive souvent qu’un navigateur doive être configuré pour accéder à Internet ou à des Intranets en passant par un serveur proxy. Les administrateurs savent ensuite combien il est fastidieux lors d’un changement des paramètres proxy de devoir modifier tous les postes de travail ou d’informer les utilisateurs souvent novices. De même, en cas de panne du serveur proxy, il est souvent nécessaire de revenir en accès direct à Internet, au risque d’oublier ensuite de remettre la configuration proxy.
Depuis Netscape 2.0, vous pouvez créer un fichier de configuration automatique de proxy. Vous devrez simplement indiquer l’adresse URL vers ce fichier dans les options de configuration du navigateur.

- Configuration proxy
Cette adresse est celle d’un unique fichier de configuration en javascript (généralement avec une extension .pac) qui lui même contient une unique fonction FindProxyForURL().
function FindProxyForURL(url, host) {
...
}où url est l’adresse complète du site à accéder transmis par le navigateur et host est l’extraction simple du domaine de cette adresse.
Une précision est nécessaire car ce fichier, situé sur un serveur local ou distant, doit être délivré avec le type mime [2] application/x-ns-proxy-autoconfig. Sous Apache, il est simple d’ajouter ce type par une ligne AddType dans le fichier de configuration :
AddType application/x-ns-proxy-autoconfig .pac
La fonction doit retourner une valeur au navigateur indiquant quelle configuration proxy utiliser. Cette valeur est une simple chaîne de caractères pouvant contenir un ou plusieurs des blocs d’informations suivants, séparés par des points virgules :
| DIRECT | connexion directe à internet, sans proxy |
| PROXY host:port | connexion via le proxy spécifié |
| SOCKS host:port | connexion via un serveur SOCKS |
Notez que si vous spécifiez plusieurs blocs, en cas d’échec de la première connexion correspondant au premier bloc, la seconde connexion correspondant au second bloc sera utilisée, et ainsi de suite. A l’inverse, si la fonction ne renvoie rien ou une chaîne vide, une connexion directe sera utilisée.
Par exemple, la fonction peut contenir une ligne return "PROXY w3proxy.mondomaine.com:8080; PROXY mozilla.mondomaine.com:8081; DIRECT";.
Il vous suffit donc d’écrire un script en langage javascript qui n’aura d’autre tâche que de retourner une des trois valeurs mentionnées dans le tableau précédent. Votre script se résumera en général à une série de tests sur l’adresse url ou l’hôte host transmis. Vous bénéficiez des fonctions habituelles de javascript, telles que le traitement des chaînes de caractères, et quelques-unes spécifiques, décrites ci-dessous.
Exemple 1 :
Le proxy ne sera pas utilisé pour les adresses en nom local et celles du sous domaine .mondomaine.com. Toutes les autres adresses utilisent le proxy. Vous noterez qu’en cas de défaillance du serveur proxy, une connexion directe sera utilisée.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) ||
dnsDomainIs(host, ".mondomaine.com"))
return "DIRECT";
else
return "PROXY w3proxy.mondomaine.com:8080; DIRECT";
}Exemple 2 :
Ici, quatre serveurs proxy sont utilisés. Le premier pour les accès vers les domaines .com, le second vers les accès vers les domaines .edu, le troisième pour tous les autres domaines et le quatrième étant en secours. Les adresses locales ou du sous-domaine .mondomaine.com sont traitées en connexion directe.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) || dnsDomainIs(host, ".mondomaine.com"))
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY proxy1.mondomaine.com:8080; " +
"PROXY proxy4.mondomaine.com:8080";
else if (shExpMatch(host, "*.edu"))
return "PROXY proxy2.mondomaine.com:8080; " +
"PROXY proxy4.mondomaine.com:8080";
else
return "PROXY proxy3.mondomaine.com:8080; " +
"PROXY proxy4.mondomaine.com:8080";
}Exemple 3 :
Dans cet exemple, la configuration proxy renvoyée dépendra du protocole employé. A noter que la fonction shExpMatch(url, "http:*") aurait pu remplacer le code url.substring(0, 5) == "http:".
function FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
return "PROXY http-proxy.mondomaine.com:8080";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY ftp-proxy.mondomaine.com:8080";
}
else if (url.substring(0, 7) == "gopher:") {
return "PROXY gopher-proxy.mondomaine.com:8080";
}
else if (url.substring(0, 6) == "https:" ||
url.substring(0, 6) == "snews:") {
return "PROXY security-proxy.mondomaine.com:8080";
}
else {
return "DIRECT";
}
}Les différentes fonctions prédéfinies utilisables
Pour traiter l’adresse url transmise par le navigateur, vous disposez de fonctions prédéfinies qui vous serviront au travers de tests dans votre script.
- Tests sur le nom de domaine :
- isPlainHostName()
- dnsDomainIs()
- localHostOrDomainIs()
- isResolvable()
- isInNet()
- Fonctions associées :
- dnsResolve()
- myIpAddress()
- dnsDomainLevels()
- Tests sur l’URL ou le nom de domaine :
- shExpMatch()
- Tests temporels :
- weekdayRange()
- dateRange()
- timeRange()
Dans la majorité des cas, les fonctions retournent une valeur booléenne true ou false, respectivement vrai ou faux.
Détail des fonctions disponibles pour la configuration automatique du proxy
isPlainHostName(host)
renvoie true s’il n’y a pas de nom de domaine dans host (ex : "www"), et false si host contient des points (ex. : "www.mozilla.org").
dnsDomainIs(host, domain)
renvoie true si domain est un sous domaine de host.
dnsDomainIs("www.mozilla.org", ".mozilla.org") renvoie true
dnsDomainIs("www", ".mozilla.org") renvoie false
localHostOrDomainIs(host, hostdom)
renvoie true s’il n’y a pas de nom de domaine dans host ou si host correspond exactement à hostdom.
localHostOrDomainIs("www.mozilla.org", "www.mozilla.org") renvoie true
localHostOrDomainIs("www", "www.mozilla.org") renvoie true
isResolvable(host)
renvoie true si le serveur host est accessible.
isInNet(host, pattern, mask)
renvoie true si l’adresse IP de l’hôte host dont les valeurs masquées de façon binaire par les valeurs de mask correspond au schéma pattern.
isInNet(host, "198.95.0.0", "255.255.0.0") renvoie true si l’adresse IP de host est égale à "198.95.*.*"
dnsResolve(host)
renvoie l’adresse IP de l’hôte host sous la forme d’une chaîne de caractères séparés par des points.
dnsResolve("www.mozilla.org") renvoie "193.252.19.3"
myIpAddress()
renvoie l’adresse IP utilisée par le navigateur sous la forme d’une chaîne de caractères séparés par des points.
dnsDomainLevels(host)
renvoie le nombre de niveau de domaine dans le nom d’hôte host (en fait, le nombre de point dans host).
dnsDomainLevels("www.mozilla.org") renvoie 2
shExpMatch(str, shexp)
renvoie true si la chaîne str, pouvant être un lien URL, correspond au critère shexp exprimé sous forme d’un filtre en ligne de commande, et non en une expression régulière.
shExpMatch("http://www.mozilla.org/products/firefox/index.html", "*/products/*") renvoie true
weekdayRange(wd1, wd2, gmt)
renvoie true si le jour actuel de la semaine (local ou GMT) est inclus dans la plage définit par wd1 et wd2.
wd1 et wd2 prennent les valeurs SUN, MON, TUE, WED, THU, FRI ou SAT (où SUN=dimanche, MON=lundi, etc.), et gmt est vide pour le temps local ou prend la valeur "GMT" pour le temps calculé sur le méridien de Greenwich.
weekdayRange("MON", "FRI") renvoie true du lundi au vendredi.
weekdayRange("SAT") renvoie true le samedi
dateRange(day1, month1, year1, day2, month2, year2, gmt)
renvoie true si le jour actuel (local ou GMT) est inclus dans une plage temporelle. Les mois sont les chaînes de caractères JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV ou DEC (ou JAN=janvier, etc.).
dateRange(1) renvoie true les premiers jours de chaque mois
dateRange(1, 15) renvoie true du 1 au 15 de chaque mois
dateRange(1, "JAN", 15, "MAR") renvoie true du 1er janvier au 15 mars de chaque année
dateRange(1999, 2002) renvoie true de l’année 1999 (et non 99 !) à 2002
timeRange(hour1, min1, sec1, hour2, min2, sec2, gmt)
renvoie true si l’appel se fait dans la plage temporelle définie.
timerange(12) renvoie true de midi à 13 heures
timerange(8, 30, 17, 00) renvoie true de 8h30 à 17h00
Articles dans la même rubrique
- Firefox en situation (16 juillet 2009 - 3420 visites - popularité 5%)
- Firefox 3 et les certificats auto-signés (22 mai 2009 - 6655 visites - popularité 50%)
- Plongez à l’intérieur des profils de Firefox 3 (6 septembre 2008 - 41507 visites - popularité 20%)
Commentaires
(Si vous recherchez de l'aide pour l'utilisation d'un produit, veuillez utiliser les forums de Geckozone. Les commentaires concernent uniquement l'article. Merci.)
Afficher les commentaires (4) Ajouter un commentaire


