Пређи на главни садржај

PAC (Proxy auto-config) синтакса

Информације

Ако у документацији пронађете грешку или имате предлог, оставите поруку на форуму Mudfish (https://forums.mudfish.net). Примери и објашњења овде су у изворном документу припремљени превођењем или коришћењем следећих страница као референце.

Проширење Mudfish за прегледач подржава формат датотеке PAC (Proxy auto-config).

PAC функције​

Прегледачи који подржавају PAC обично подржавају функције наведене у стандардном формату који је дефинисао Netscape.

Ове функције обично раде у sandbox-у, односно строго ограниченом окружењу. На пример, приступ подацима User Agent-а потпуно је онемогућен.

Испод су описане функције дозвољене у sandbox окружењу. Коментари у изворним примерима кода остављени су на корејском; њихово значење је објашњено испред сваког примера.

dnsDomainIs​

Проверава име хоста и враћа true ако се подудара. Обично се користи за проверу појединачних имена хостова као изузетака.

Ако се име хоста подудара са google.com или његовим поддоменима (на пример maps.google.com и www.google.com), прегледач приступа директно, без проксија.

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

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

shExpMatch​

Упоређује име хоста или URL са низом задатим shell изразом и враћа true ако се подударају.

Први пример омогућава директан приступ свим именима хостова која се завршавају са .local. Други омогућава директан приступ vpn.domain.com и свим фасциклама и датотекама испод 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​

Проверава IP адресу имена хоста и враћа true ако припада одређеној подмрежи. Ако је аргумент име хоста, прво га DNS разрешавањем претвара у IP адресу.

Ако IP адреса траженог хоста после DNS разрешавања припада задатом опсегу, приступ је директан.

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

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

myIpAddress​

Враћа IP адресу тренутног рачунара.

Ако рачунар припада одређеном IP опсегу, захтев се шаље преко проксија 10.10.5.1 на порту 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 разрешавањем претвара име хоста у IP адресу.

Ако IP адреса траженог хоста припада неком од наведених опсега, приступ је директан.

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

Враћа true ако име хоста не садржи ниједну тачку (.). Пример је http://intranet; функција се обично користи при приступу веб-адресама интерне мреже.

Ако корисник тражи обично име хоста, на пример http://intranet/ или http://webserver-name01/, приступ је директан.

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

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

localHostOrDomainIs​

Проверава име хоста и враћа true ако се део са именом хоста подудара.

Ако је тражено име хоста „www” или „www.google.com”, приступ је директан.

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

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

isResolvable​

Претвара име хоста у IP адресу и враћа true ако је поступак успешан.

Ако разрешавање домена не успе, сам прегледач може накратко да се замрзне (заустави). Користите пажљиво.

Ако DNS сервер може да разреши тражено име хоста, захтев се шаље преко проксија proxy1.example.com.

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

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

dnsDomainLevels​

Проверава име хоста и враћа број тачака (.) у њему. Може се користити, на пример, за изузимање веб-сервера интерне мреже.

Ако име хоста садржи бар једну тачку, користи се proxy1.example.com; у супротном приступ је директан.

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

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

weekdayRange​

Може служити за правила заснована на времену, на пример ако желите да се подешавање проксија враћа само одређеним данима.

Од понедељка до петка користи се proxy1.example.com, а осталим данима приступ интернету је директан.

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

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

dateRange​

Може служити за правила заснована на времену, на пример за примену проксија само током одређених месеци.

Од јануара до марта користи се proxy1.example.com, а у супротном приступ је директан.


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

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

timeRange​

Може се користити када желите прокси само у одређено доба дана.

Само од 8 ујутру до 6 поподне користи се proxy1.example.com; ван тог периода приступ је директан.

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

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

alert​

Ова функција није постојала када је PAC формат првобитно дефинисан, али је Internet Explorer и Firefox дефинишу ради отклањања проблема.

Резултат DNS разрешавања исписује се у конзоли грешака прегледача.

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

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