Přeskočit na hlavní obsah

Syntaxe PAC (Proxy auto-config)

info

Pokud v dokumentaci najdete chybu nebo máte návrh na zlepšení, zanechte zprávu na fóru Mudfish (https://forums.mudfish.net). Zde uvedené příklady a vysvětlení byly přeloženy nebo zpracovány s využitím následujících stránek.

Rozšíření Mudfish pro prohlížeče podporuje formát souborů PAC (Proxy auto-config).

Funkce PAC​

Prohlížeče podporující PAC obvykle poskytují funkce definované ve standardním formátu společnosti Netscape.

Tyto funkce však zpravidla běží v sandboxu, tedy v přísně omezeném prostředí. Například přístup k údajům User Agent je zcela zakázán.

Níže jsou popsány funkce povolené v sandboxu. Původní ukázky kódu jsou zachovány včetně korejských komentářů; jejich význam je vysvětlen česky před každou ukázkou.

dnsDomainIs​

Kontroluje název hostitele a při shodě vrací true. Obvykle se používá ke kontrole jednotlivých hostitelů, pro které má platit výjimka.

Pokud název hostitele odpovídá google.com nebo podřízeným adresám, například maps.google.com či www.google.com, prohlížeč se připojí přímo bez proxy.

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

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

shExpMatch​

Porovnává název hostitele nebo URL s řetězcem určeným shellovým vzorem a při shodě vrací true.

První podmínka posílá požadavky na hostitele končící .local přímo bez proxy. Druhá zajistí přímé připojení k vpn.domain.com nebo ke všem složkám a souborům 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​

Kontroluje IP adresu hostitele a vrací true, pokud spadá do dané podsítě. Pokud je předán název hostitele, převede se na IP adresu pomocí DNS.

Pokud IP adresa požadovaného hostitele po překladu DNS patří do zadaného rozsahu, připojení bude přímé.

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

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

myIpAddress​

Vrací IP adresu aktuálního počítače.

Pokud počítač patří do určeného rozsahu IP adres, požadavky půjdou přes proxy 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​

Překládá název hostitele na IP adresu pomocí DNS.

Pokud IP adresa požadovaného hostitele patří do některého z uvedených rozsahů, připojení bude přímé.

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

Vrací true, pokud název hostitele neobsahuje žádnou tečku. Příkladem je http://intranet; funkci lze použít při přístupu na weby v interní síti.

Pokud uživatel požaduje jednoduchý název hostitele, například http://intranet/ nebo http://webserver-name01/, připojení bude přímé.

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

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

localHostOrDomainIs​

Kontroluje název hostitele a vrací true, pokud se části názvu hostitele shodují.

Pokud je požadovaným hostitelem „www“ nebo „www.google.com“, připojení bude přímé.

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

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

isResolvable​

Pokusí se přeložit název hostitele na IP adresu a při úspěchu vrací true.

Pokud překlad doménového jména nefunguje správně, může se prohlížeč na chvíli zaseknout. Používejte funkci opatrně.

Pokud lze požadovaný název hostitele přeložit pomocí serveru DNS, požadavek se odešle přes proxy1.example.com.

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

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

dnsDomainLevels​

Vrací počet teček v názvu hostitele. Lze ji například použít k vytvoření výjimky pro interní webové servery.

Pokud název hostitele obsahuje alespoň jednu tečku, použije se proxy1.example.com; jinak bude připojení přímé.

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

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

weekdayRange​

Umožňuje vytvářet pravidla podle času, například vracet nastavení proxy pouze v určitých dnech.

Od pondělí do pátku se použije proxy1.example.com, v ostatní dny přímé připojení k internetu.

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

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

dateRange​

Umožňuje vytvářet časová pravidla, například používat proxy pouze v určitých měsících.

Od ledna do března se použije proxy1.example.com; jinak bude připojení přímé.


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

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

timeRange​

Umožňuje používat proxy pouze v určitém časovém rozmezí.

Pouze od 8 hodin ráno do 18 hodin se použije proxy1.example.com; jinak bude připojení přímé.

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

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

alert​

Při původní definici formátu PAC tato funkce neexistovala. Prohlížeče Internet Explorer a Firefox ji poskytují pro řešení problémů.

Výsledek překladu DNS se vypíše do chybové konzole prohlížeče.

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

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