PAC (Proxy auto-config) sintaksė
Jei radote klaidą ar turite pasiūlymų, parašykite Mudfish forume (https://forums.mudfish.net). Originalo pavyzdžiai ir paaiškinimai parengti išvertus arba panaudojus šių svetainių informaciją:
Mudfish naršyklės plėtinys palaiko PAC (Proxy auto-config) failo formatą.
PAC funkcijos
PAC palaikančios naršyklės paprastai palaiko Netscape standartiniame formate apibrėžtas funkcijas. Jos vykdomos griežtai ribotoje izoliuotoje aplinkoje (sandbox). Pavyzdžiui, negalima skaityti User Agent informacijos.
Toliau aprašytos šioje aplinkoje leidžiamos funkcijos. Kodo pavyzdžiai, įskaitant originalo komentarus, palikti nepakeisti; kiekvieno komentaro prasmė pateikta lietuviškai prieš pavyzdį.
dnsDomainIs
Tikrina pagrindinio kompiuterio vardą ir grąžina true, jei jis atitinka. Paprastai naudojama atskiriems vardams, kuriems taikomos išimtys, patikrinti.
Pavyzdžio paaiškinimas: Jei vardas yra google.com arba atitinkamas padomenis, pvz., maps.google.com ar www.google.com, naršyklė jungiasi tiesiogiai, be tarpinio serverio.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Lygina pagrindinio kompiuterio vardą arba URL su apvalkalo šablonu nurodyta eilute ir, jei atitinka, grąžina true.
Pavyzdžio paaiškinimas: Visos užklausos vardams, kurie baigiasi .local, siunčiamos tiesiogiai. Taip pat tiesiogiai jungiama prie vpn.domain.com ir visų http://abcdomain.com/folder/ poaplankių bei failų.
// 모든 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
Tikrina, ar pagrindinio kompiuterio IP adresas priklauso nurodytam potinkliui, ir tokiu atveju grąžina true. Jei perduodamas vardas, jis per DNS paverčiamas IP adresu.
Pavyzdžio paaiškinimas: Jei užklausto vardo IP adresas po DNS sprendimo priklauso nurodytam IP diapazonui, jungiama tiesiogiai.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Grąžina dabartinio kompiuterio IP adresą.
Pavyzdžio paaiškinimas: Jei kompiuteris priklauso nurodytam IP diapazonui, užklausa siunčiama per tarpinį serverį 10.10.5.1, prievadą 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
DNS pagalba paverčia pagrindinio kompiuterio vardą IP adresu.
Pavyzdžio paaiškinimas: Jei užklausto kompiuterio IP priklauso vienam iš nurodytų diapazonų, jungiama tiesiogiai.
// 만약 요청한 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
Grąžina true, jei varde nėra nė vieno taško, pavyzdžiui, http://intranet. Gali būti naudojama vidinio tinklo žiniatinklio adresams.
Pavyzdžio paaiškinimas: Jei naudotojas užklausia paprasto vardo, pvz., http://intranet/ ar http://webserver-name01/, jungiama tiesiogiai.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Tikrina pagrindinio kompiuterio vardą ir grąžina true, jei vardo dalis sutampa.
Pavyzdžio paaiškinimas: Jei užklaustas vardas yra „www“ arba „www.google.com“, jungiama tiesiogiai.
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Bando vardą paversti IP adresu ir, jei pavyksta, grąžina true.
Jei domeno nepavyksta išspręsti, naršyklė gali trumpam užstrigti. Naudokite atsargiai.
Pavyzdžio paaiškinimas: Jei DNS serveris gali išspręsti užklaustą vardą, užklausa siunčiama per proxy1.example.com tarpinį serverį.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Grąžina taškų skaičių pagrindinio kompiuterio varde. Gali būti naudojama, pavyzdžiui, vidinio tinklo žiniatinklio serveriams išskirti.
Pavyzdžio paaiškinimas: Jei varde yra bent vienas taškas, naudojamas proxy1.example.com tarpinis serveris; kitu atveju jungiama tiesiogiai.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Leidžia kurti taisykles pagal laiką, pavyzdžiui, grąžinti tarpinio serverio nustatymus tik tam tikromis dienomis.
Pavyzdžio paaiškinimas: Nuo pirmadienio iki penktadienio naudojamas proxy1.example.com, kitomis dienomis jungiama tiesiogiai.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Leidžia kurti taisykles pagal datą, pavyzdžiui, taikyti tarpinį serverį tik tam tikrais mėnesiais.
Pavyzdžio paaiškinimas: Nuo sausio iki kovo naudojamas proxy1.example.com, kitu metu jungiama tiesiogiai.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Leidžia naudoti tarpinį serverį tik nurodytu paros metu.
Pavyzdžio paaiškinimas: Tik nuo 8 valandos ryto iki 18 valandos naudojamas proxy1.example.com, kitu metu jungiama tiesiogiai.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Šios funkcijos pirminiame PAC formato apibrėžime nebuvo, tačiau Internet Explorer ir Firefox ją apibrėžia problemoms diagnozuoti.
Pavyzdžio paaiškinimas: DNS sprendimo rezultatas išvedamas naršyklės klaidų konsolėje.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);