Ga naar hoofdinhoud

PAC-syntaxis (Proxy auto-config)

info

Staan er fouten in dit document of heb je suggesties, plaats dan een bericht op het Mudfish-forum (https://forums.mudfish.net). De voorbeelden en uitleg in de bron zijn vertaald of opgesteld op basis van:

De Mudfish-browserextensie ondersteunt het PAC-bestandsformaat (Proxy auto-config).

PAC-functies​

Browsers die PAC ondersteunen bieden doorgaans de functies uit het standaardformaat van Netscape. Deze functies draaien in een streng beperkte sandbox. Je kunt bijvoorbeeld geen User Agent-gegevens opvragen.

Hieronder staan de toegestane functies. De oorspronkelijke code, inclusief de Koreaanse commentaren, is behouden. Bij ieder voorbeeld wordt de betekenis van die commentaren in het Nederlands uitgelegd.

dnsDomainIs​

Controleert de hostnaam en geeft true terug bij een overeenkomst. Dit wordt vaak gebruikt voor uitzonderingen voor afzonderlijke hostnamen.

Het voorbeeld laat google.com en overeenkomende subdomeinen zoals maps.google.com en www.google.com rechtstreeks verbinden, zonder proxy.

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

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

shExpMatch​

Vergelijkt een hostnaam of URL met een shellpatroon en geeft true terug bij een overeenkomst.

Het eerste voorbeeld laat verzoeken voor hostnamen die op .local eindigen rechtstreeks verbinden. Het tweede doet hetzelfde voor vpn.domain.com en alle bestanden of mappen onder 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​

Controleert of het IP-adres van een hostnaam binnen een bepaald subnet valt. Als een hostnaam wordt doorgegeven, wordt deze eerst via DNS naar een IP-adres vertaald.

Het voorbeeld verbindt rechtstreeks als het opgevraagde IP-adres in het opgegeven bereik ligt.

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

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

myIpAddress​

Geeft het IP-adres van je eigen computer terug.

Het voorbeeld gebruikt proxy 10.10.5.1 op poort 8080 als je computer in het opgegeven IP-bereik ligt.

   // 만약 나의 컴퓨터가 특정 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​

Zet een hostnaam via DNS om in een IP-adres.

Het voorbeeld laat rechtstreeks verbinden als het IP-adres van de host binnen een van de opgegeven bereiken ligt.

   // 만약 요청한 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​

Geeft true terug als de hostnaam geen punt bevat, bijvoorbeeld http://intranet. Dit wordt vaak gebruikt voor interne webadressen.

Het voorbeeld laat gewone hostnamen, zoals http://intranet/ of http://webserver-name01/, rechtstreeks verbinden.

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

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

localHostOrDomainIs​

Controleert de hostnaam en geeft true terug als het hostnaamgedeelte overeenkomt.

Het voorbeeld laat www en www.google.com rechtstreeks verbinden.

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

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

isResolvable​

Probeert een hostnaam om te zetten naar een IP-adres en geeft true terug als dit lukt.

Als het oplossen van de domeinnaam mislukt, kan de browser kort vastlopen. Gebruik deze functie voorzichtig.

Het voorbeeld gebruikt proxy1.example.com als DNS de hostnaam kan oplossen.

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

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

dnsDomainLevels​

Telt het aantal punten in een hostnaam. Dit kan bijvoorbeeld worden gebruikt om interne webservers uit te zonderen.

Het voorbeeld gebruikt proxy1.example.com als de hostnaam minstens één punt bevat; anders wordt rechtstreeks verbonden.

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

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

weekdayRange​

Maakt tijdsafhankelijke regels, bijvoorbeeld om alleen op bepaalde dagen een proxy te gebruiken.

Het voorbeeld gebruikt proxy1.example.com van maandag tot en met vrijdag en verbindt op andere dagen rechtstreeks.

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

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

dateRange​

Maakt tijdsafhankelijke regels, bijvoorbeeld om alleen in bepaalde maanden een proxy te gebruiken.

Het voorbeeld gebruikt proxy1.example.com van januari tot en met maart en verbindt anders rechtstreeks.


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

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

timeRange​

Laat alleen gedurende bepaalde uren een proxy gebruiken.

Het voorbeeld gebruikt proxy1.example.com van 08.00 tot 18.00 uur en verbindt daarbuiten rechtstreeks.

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

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

alert​

Deze functie maakte geen deel uit van de eerste PAC-definitie, maar is voor foutopsporing toegevoegd in Internet Explorer en Firefox.

Het voorbeeld toont het resultaat van de DNS-opzoeking in de foutconsole van de browser.

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

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