Question :
Qu'est-ce qu'un fichier Proxy Pac et y a-t-il des exemples ?
Environnement : Appareil de sécurité Web Cisco
Remarque : cet article de la base de connaissances fait référence à un logiciel qui n'est pas géré ou pris en charge par Cisco. Les informations sont fournies comme courtoisie pour votre commodité. Pour plus d'assistance, communiquez avec le fournisseur du logiciel.
Lien de référence : exemples de fichiers de proxy automatique JavaScript ou JScript
Exemples de fichiers JavaScript ou JScript Auto-Proxy
Les scripts suivants fournissent des exemples de la façon dont un fichier « .pac » pourrait être utilisé pour spécifier une URL de mandataire automatique. Pour utiliser ces fonctions, vous devez modifier les noms du mandataire, les numéros de port et les adresses IP.
- Les fonctions isInNet, isResolvable et dnsResolve interrogent un serveur DNS
- Les références aux objets, propriétés ou méthodes du modèle d'objet entraînent l'échec silencieux du fichier de configuration automatique du proxy. Par exemple, les références window.open(...), alert(...) et password(...) provoquent toutes l'échec du fichier de configuration automatique du proxy sur Internet Explorer.
Exemple 1 : les hôtes locaux se connectent directement, tous les autres se connectent via un proxy
La fonction suivante vérifie si le nom d'hôte est un hôte local et, si tel est le cas, si la connexion est directe. Si le nom d'hôte n'est pas un hôte local, la connexion s'effectue via le proxy (proxy).
fonction FindProxyForURL(url, host)
{
if (isPlainHostName(host))
retour "DIRECT";
autre
return "Proxy :80";
}
La fonction isPlainHostName vérifie s'il y a des points dans le nom d'hôte. Si c'est le cas, elle renvoie false ; sinon, la fonction renvoie true.
Remarque : pour une connexion directe au serveur Web local, une correspondance de domaine ou de sous-réseau peut également être nécessaire. Toutes les requêtes aux serveurs Web locaux ne sont pas effectuées uniquement avec des noms d’hôte
Exemple 2 : Les hôtes à l'intérieur du pare-feu se connectent directement, les serveurs locaux externes se connectent via le proxy
La fonction suivante vérifie si l'hôte est un nom d'hôte « simple » (ce qui signifie que le nom de domaine n'est pas inclus) ou s'il fait partie d'un domaine particulier (.company.com), mais le nom d'hôte n'est ni www ni home.
fonction FindProxyForURL(url, host)
{
if (isPlainHostName(host) ||
dnsDomainIs(host, ".company.com") et&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com"))
retour "DIRECT";
autre
return "Proxy :80";
}
Remarque :
- La fonction localHostOrDomainIs est exécutée uniquement pour les URL dans le domaine local.
- La fonction dnsDomainIs renvoie true si le domaine du nom d'hôte correspond au domaine donné.
Exemple 3 : si l'hôte peut être résolu, connectez-vous directement. Sinon, connectez-vous en utilisant un proxy.
La fonction suivante demande au serveur DNS d’essayer de résoudre le nom d’hôte qui lui a été transmis. Si tel est le cas, une connexion directe est établie. Si ce n'est pas le cas, la connexion s'effectue via un proxy. Cela est utile lorsqu’un serveur DNS interne est utilisé pour résoudre tous les noms d’hôtes internes.
fonction FindProxyForURL(url, host)
{
if (isResolvable(host))
retour "DIRECT";
autre
return "Proxy :80";
}
Reportez-vous à la remarque sur la fonction isResolvable en haut de la page.
Exemple 4 : si l'hôte se trouve dans le sous-réseau spécifié, connectez-vous directement. Sinon, connectez-vous en utilisant un proxy.
La fonction suivante compare un masque et un modèle d’adresse IP donnés au nom d’hôte. Cela est utile si certains hôtes d’un sous-réseau doivent être connectés directement et d’autres à l’aide d’un proxy.
fonction FindProxyForURL(url, host)
{
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
retour "DIRECT";
autre
return "Proxy :80";
}
Reportez-vous à la remarque relative à la fonction isInNet en haut de la page.
La fonction isInNet(host, pattern, mask) renvoie true si l'adresse IP de l'hôte correspond au modèle spécifié. Le masque indique la partie de l'adresse IP à faire correspondre (255=match, 0=ignore).
Exemple 5 : Déterminer le type de connexion en fonction du domaine hôte
La fonction suivante spécifie une connexion directe si l'hôte est local. Si l'hôte n'est pas local, cette fonction détermine le proxy à utiliser en fonction du domaine hôte. Cela est utile si le nom de domaine d'hôte est l'un des critères de sélection du proxy.
fonction FindProxyForURL(url, host)
{
if (isPlainHostName(host))
retour "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy : 80";
else if (shExpMatch(host, "*.edu"))
return "PROXY eduproxy : 80";
autre
return "proxy PROXY";
}
La fonction shExpMatch(str, shexp) renvoie true si str correspond à shexp à l'aide de modèles d'expression de shell.
Exemple 6 : Déterminer le type de connexion en fonction du protocole utilisé
La fonction suivante extrait le protocole utilisé et effectue une sélection de proxy en conséquence. Si aucune correspondance n'est établie sur le protocole, une connexion directe est établie. Cela est utile si le protocole utilisé est l'un des critères de sélection du proxy.
fonction FindProxyForURL(url, host)
{
if (url.subsing(0, 5) == "http:") {
return "Proxy :80";
}
else if (url.subsing(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.subsing(0, 7) == "gopher:") {
return "PROXY gproxy";
}
else if (url.subsing(0, 6) == "https:") {
return "PROXY secproxy : 8080";
}
else {
retour "DIRECT";
}
}
La fonction de sous-chaîne extrait le nombre de caractères spécifié d'une chaîne.
Exemple 7 : Déterminez le paramètre de proxy en vérifiant si le nom d'hôte correspond à l'adresse IP
La fonction suivante effectue une sélection de proxy en traduisant le nom d'hôte en adresse IP et en le comparant à une chaîne spécifiée.
fonction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = http://proxy
return "PROXY secproxy : 8080";
}
else {
return "Proxy :80";
}
}
Reportez-vous à la remarque relative à la fonction dnsResolve en haut de la page.
Exemple 8 : Si l'adresse IP de l'hôte correspond à l'adresse IP spécifiée, connectez-vous via le proxy, sinon connectez-vous directement
La fonction suivante est une autre façon d'effectuer une sélection de proxy basée sur la spécification d'une adresse IP. Cet exemple, contrairement à l'exemple 7, utilise l'appel de fonction pour obtenir explicitement l'adresse IP numérique (l'exemple 7 utilise la fonction dnsResolve pour traduire le nom d'hôte en adresse IP numérique).
fonction FindProxyForURL(url, host)
{
if (myIpAddress() == "999.99.999.99") {
return "Proxy :80";
}
else {
retour "DIRECT";
}
}
La fonction myIpAddress renvoie l'adresse IP (au format point-entier) de l'hôte sur lequel le navigateur est exécuté.
Exemple 9 : S'il y a des points dans le nom d'hôte, connectez-vous en utilisant un proxy. Sinon, connectez-vous directement.
La fonction suivante vérifie le nombre de points dans le nom d'hôte. S'il y a des points dans le nom d'hôte, établissez une connexion via le proxy. S’il n’y a pas de point dans le nom d’hôte, établissez une connexion directe. C'est une autre façon de déterminer les types de connexion en fonction des caractéristiques du nom d'hôte.
fonction FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // si le nombre de points dans l'hôte > 0
return "Proxy :80";
}
retour "DIRECT";
}
La fonction dnsDomainLevels renvoie un entier égal au nombre de points dans le nom d'hôte.
Exemple 10 : Spécifier les jours de la semaine pour se connecter via le proxy, les autres jours pour se connecter directement
La fonction suivante détermine le type de connexion en spécifiant les jours de la semaine appropriés pour un proxy. Les jours qui ne se situent pas entre ces paramètres utilisent une connexion directe. Cette fonction peut être utile dans les situations où vous pouvez utiliser un proxy lorsque le trafic est dense et permettre une connexion directe lorsque le trafic est faible.
fonction FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "Proxy :80";
autre
retour "DIRECT";
}
La fonction weekdayRange(day1 [, day2] [, GMT] ) renvoie si l'heure système actuelle se situe dans la plage spécifiée par les paramètres day1, day2 et GMT. Seul le premier paramètre est requis. Le paramètre GMT suppose que les valeurs horaires sont exprimées en heure de Greenwich plutôt que dans le fuseau horaire local.
Exemple 11 : Équilibrage de charge avec une fonction mathématique simple
fonction FindProxyForURL(url, host){
return randomProxy();
}
fonction randomProxy()
{
switch( Math.floor( Math.random() *2))
{
Cas 0 : retour "PROXY 1.1.1.1:3128 ; PROXY 2.2.2.2 ; PROXY DIRECT ;"
Cas 1 : retour "PROXY 2.2.2.2:3128; PROXY 1.1.1.1; PROXY DIRECT;"
}
}
Vous verrez que les cas implémentent également un basculement au cas où un proxy n'est pas disponible.