Sintaxi PAC (Proxy auto-config)
Si trobeu errors en aquest document o teniu suggeriments, deixeu un missatge al fòrum de Mudfish (https://forums.mudfish.net). Els exemples i explicacions de l'original es van elaborar traduint o consultant aquests llocs:
Les extensions de navegador de Mudfish admeten el format de fitxer PAC (Proxy auto-config).
Funcions PAC
Els navegadors compatibles amb PAC normalment admeten les funcions definides al format estàndard de Netscape.
Aquestes funcions s'executen en un entorn aïllat amb restriccions estrictes. Per exemple, no poden consultar la informació User Agent.
A continuació es descriuen les funcions permeses. Els blocs de codi es conserven tal com apareixen a l'original, inclosos els comentaris en coreà; cada exemple inclou una explicació en català.
dnsDomainIs
Comprova el nom d'amfitrió i retorna true si coincideix. Normalment s'utilitza per comprovar noms d'amfitrió concrets que s'han de tractar com a excepcions.
L'exemple connecta directament, sense servidor intermediari, si el nom coincideix amb google.com o amb un subdomini com maps.google.com o www.google.com.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Compara el nom d'amfitrió o l'URL amb una expressió de shell i retorna true si coincideix.
L'exemple connecta directament per als noms acabats en .local, per a vpn.domain.com i per a tots els fitxers i subcarpetes 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
Comprova l'adreça IP del nom d'amfitrió i retorna true si pertany a la subxarxa indicada. Si rep un nom d'amfitrió, el converteix en IP mitjançant DNS.
L'exemple connecta directament si la IP resolta pertany al rang indicat.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Retorna l'adreça IP de l'ordinador actual.
L'exemple utilitza el servidor intermediari 10.10.5.1 al port 8080 si l'ordinador pertany al rang especificat.
// 만약 나의 컴퓨터가 특정 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
Converteix un nom d'amfitrió en una adreça IP mitjançant DNS.
L'exemple connecta directament si la IP de l'amfitrió sol·licitat pertany a un dels rangs indicats.
// 만약 요청한 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
Retorna true si el nom d'amfitrió no conté cap punt. Per exemple, http://intranet. Pot ser útil per accedir a llocs web de la xarxa interna.
L'exemple connecta directament si es demana un nom simple, com http://intranet/ o http://webserver-name01/.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Comprova el nom d'amfitrió i retorna true si la part del nom coincideix.
L'exemple connecta directament si el nom sol·licitat és www o www.google.com.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Converteix el nom d'amfitrió en una IP i retorna true si ho aconsegueix.
Si la resolució del domini falla, el navegador es pot quedar bloquejat temporalment. Utilitzeu aquesta funció amb cura.
L'exemple utilitza el servidor intermediari proxy1.example.com si el servidor DNS pot resoldre el nom sol·licitat.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Retorna el nombre de punts que conté el nom d'amfitrió. Pot servir, per exemple, per excloure servidors web interns.
L'exemple utilitza proxy1.example.com si el nom conté almenys un punt; en cas contrari, connecta directament.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Permet crear regles basades en el temps, per exemple, per utilitzar un servidor intermediari només determinats dies.
L'exemple utilitza proxy1.example.com de dilluns a divendres i connecta directament la resta de dies.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Permet crear regles basades en el temps, per exemple, per utilitzar un servidor intermediari només determinats mesos.
L'exemple utilitza proxy1.example.com de gener a març i connecta directament la resta de mesos.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Permet utilitzar un servidor intermediari només en una franja horària concreta.
L'exemple utilitza proxy1.example.com de les 8 del matí a les 6 de la tarda i connecta directament fora d'aquest horari.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Aquesta funció no formava part de la definició inicial del format PAC, però Internet Explorer i Firefox la incorporen per facilitar la resolució de problemes.
L'exemple mostra el resultat de la resolució DNS a la consola d'errors del navegador.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);