Aller au contenu principal

Syntaxe PAC (Proxy auto-config)

info

Si vous trouvez une erreur ou avez une suggestion, laissez un message sur le forum Mudfish (https://forums.mudfish.net). Les exemples et explications de cette page ont été traduits ou rédigés à partir des ressources suivantes :

L’extension de navigateur Mudfish prend en charge le format PAC (Proxy auto-config).

Fonctions PAC​

Les navigateurs compatibles PAC proposent généralement les fonctions du format standard défini par Netscape.

Ces fonctions s’exécutent toutefois dans un bac à sable strictement limité. Il est par exemple impossible d’y consulter les informations User Agent.

Les fonctions autorisées dans cet environnement sont décrites ci-dessous. Les exemples de code d’origine sont conservés ; leurs commentaires sont expliqués en français dans le texte qui les précède.

dnsDomainIs​

Teste le nom d’hôte et renvoie true s’il correspond au domaine. Cette fonction sert généralement à définir des exceptions pour certains noms d’hôte. Dans l’exemple, google.com et ses sous-domaines, tels que maps.google.com et www.google.com, sont contactés directement, sans proxy.

   // 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

Compare le nom d’hôte ou l’URL à une expression de type shell et renvoie true en cas de correspondance. Le premier exemple accède directement aux noms se terminant par .local. Le second accède directement à vpn.domain.com et à tous les fichiers ou sous-dossiers de http://abcdomain.com/folder/.

   // 모든 request 들 (.local 로 끝나는 모든 hostname 에 해당) 이
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

if (shExpMatch(url, "*.local"))
return "DIRECT";

// vpn.domain.com 에 접속할려고 하거나
// http://abcdomain.com/folder/ 하위의 모든 폴더 혹은 파일에 접속하는
// 요청들을 proxy 경유없이 직접 접속합니다.

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

Vérifie si l’adresse IP du nom d’hôte appartient au sous-réseau indiqué et renvoie true dans ce cas. Si un nom d’hôte est fourni, il est résolu par DNS. L’exemple effectue une connexion directe lorsque l’adresse résolue appartient à la plage donnée.

   // 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Renvoie l’adresse IP de l’ordinateur. Dans l’exemple, si cette adresse appartient à la plage indiquée, les requêtes passent par le proxy 10.10.5.1 sur le port 8080.

   // 만약 나의 컴퓨터가 특정 IP 대역에 속할 경우 proxy 10.10.5.1 (포트는 8080)
// 를 통해 요청하도록 합니다.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

Convertit un nom d’hôte en adresse IP par résolution DNS. L’exemple se connecte directement lorsque l’adresse du serveur demandé appartient à l’une des plages indiquées.

   // 만약 요청한 host 의 IP 가 지정한 범위에 속할 경우 직접 접속하도록
// 합니다.

if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";

isPlainHostName​

Renvoie true si le nom d’hôte ne contient aucun point. Cela concerne par exemple http://intranet et peut servir pour les adresses Web du réseau interne. L’exemple accède directement aux noms simples comme http://intranet/ ou http://webserver-name01/.

   // 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Compare les noms d’hôte et renvoie true si leur partie hôte correspond. Dans l’exemple, les requêtes vers « www » ou « www.google.com » utilisent une connexion directe.

   // 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Essaie de résoudre le nom d’hôte en adresse IP et renvoie true si la résolution réussit.

Si la résolution DNS échoue, le navigateur peut se figer brièvement. Utilisez cette fonction avec prudence.

Dans l’exemple, si le serveur DNS peut résoudre le nom demandé, la requête passe par proxy1.example.com.

   // 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

Renvoie le nombre de points dans le nom d’hôte. Cette fonction peut servir à exclure les serveurs Web internes. Dans l’exemple, un nom contenant au moins un point utilise proxy1.example.com ; sinon, la connexion est directe.

   // 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

Permet de définir des règles temporelles, par exemple pour utiliser un proxy seulement certains jours. L’exemple utilise proxy1.example.com du lundi au vendredi et une connexion directe les autres jours.

   // 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

Permet de définir des règles temporelles, par exemple pour utiliser un proxy seulement certains mois. L’exemple utilise proxy1.example.com de janvier à mars et une connexion directe le reste du temps.


// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

Permet de n’utiliser un proxy que pendant certaines heures. L’exemple utilise proxy1.example.com de 8 h à 18 h et une connexion directe en dehors de cette plage.

   // 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

Cette fonction ne faisait pas partie de la définition initiale du format PAC, mais Internet Explorer et Firefox la proposent pour le dépannage. L’exemple affiche le résultat de la résolution DNS dans la console d’erreurs du navigateur.

   // 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.

resolved_host = dnsResolve(host);
alert(resolved_host);