Sintaksa PAC (Proxy auto-config)
Ako pronađete pogrešku u dokumentaciji ili imate prijedlog, ostavite poruku na forumu Mudfish (https://forums.mudfish.net). Ovdje navedeni primjeri i objašnjenja napisani su prijevodom ili uz oslanjanje na sadržaj sljedećih stranica.
Proširenje Mudfish za preglednik podržava format datoteke PAC (Proxy auto-config).
Funkcije PAC
Preglednici koji podržavaju PAC obično podržavaju funkcije iz standardnog formata koji je odredio Netscape.
Te funkcije obično rade u izoliranom okruženju (sandbox), pa je njihovo izvršavanje strogo ograničeno. Primjerice, pristup podacima o User Agentu potpuno je onemogućen.
U nastavku su opisane dopuštene funkcije. Kod primjera, uključujući izvorne korejske komentare, zadržan je neizmijenjen; značenje komentara navedeno je na hrvatskom uz svaki primjer.
dnsDomainIs
Provjerava naziv računala i vraća true ako se podudara. Obično se upotrebljava za provjeru pojedinih naziva računala koji su iznimke.
Primjer omogućuje izravno povezivanje bez proxyja ako se naziv računala podudara s google.com ili njegovim poddomenama (primjerice maps.google.com i www.google.com).
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Uspoređuje naziv računala ili URL s nizom zadanim izrazom ljuske i vraća true ako se podudara.
Prvi primjer omogućuje izravno povezivanje za sve zahtjeve prema nazivima računala koji završavaju s .local. Drugi zaobilazi proxy za vpn.domain.com te sve mape i datoteke pod 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
Provjerava IP adresu naziva računala i vraća true ako se nalazi u određenoj podmreži. Ako se proslijedi naziv računala, razrješava ga DNS-om u IP adresu.
Ako IP adresa zatraženog računala nakon DNS razrješavanja pripada zadanom IP rasponu, primjer omogućuje izravno povezivanje.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Vraća IP adresu trenutačnog računala.
Ako računalo pripada određenom IP rasponu, zahtjev se šalje preko proxyja 10.10.5.1 na portu 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
Pretvara naziv računala u IP adresu DNS razrješavanjem.
Ako IP adresa zatraženog računala pripada nekom od navedenih raspona, povezivanje je izravno.
// 만약 요청한 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
Vraća true ako naziv računala ne sadrži nijednu točku (.). Primjer je http://intranet; funkcija se može upotrijebiti pri pristupu internim mrežnim web-adresama.
Ako korisnik zatraži jednostavan naziv računala poput http://intranet/ ili http://webserver-name01/, povezivanje je izravno.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Provjerava naziv računala i vraća true ako se dio s nazivom računala podudara.
Ako je zatraženi naziv računala „www” ili „www.google.com”, povezivanje je izravno.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Pretvara naziv računala u IP adresu i vraća true ako uspije.
Ako razrješavanje domene ne uspije, sam preglednik može se nakratko zamrznuti (prestati reagirati). Oprezno upotrebljavajte ovu funkciju.
Ako DNS poslužitelj može razriješiti zatraženi naziv računala, zahtjev se šalje preko proxyja proxy1.example.com.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Provjerava naziv računala i vraća broj točaka (.) u njemu. Može se upotrijebiti, primjerice, za izuzimanje internih web-poslužitelja.
Ako naziv računala sadrži barem jednu točku, povezivanje ide preko proxyja proxy1.example.com; inače je izravno.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Može služiti za izradu vremenskih pravila, primjerice za vraćanje postavki proxyja samo određenim danima.
Od ponedjeljka do petka upotrebljava se proxy proxy1.example.com, a ostalim danima izravna internetska veza.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Može služiti za izradu vremenskih pravila, primjerice za primjenu proxyja samo tijekom određenih mjeseci.
Od siječnja do ožujka upotrebljava se proxy proxy1.example.com, a u ostalim mjesecima izravna veza.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Omogućuje upotrebu proxyja samo tijekom određenog dijela dana.
Proxy proxy1.example.com upotrebljava se samo od 8 do 18 sati; u ostalo vrijeme povezivanje je izravno.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Ova funkcija nije bila dio prvotnog PAC formata, ali je Internet Explorer i Firefox definiraju radi otklanjanja poteškoća.
Rezultat DNS razrješavanja ispisuje se u konzolu pogrešaka preglednika.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);