Siirry pääsisältöön

PAC (Proxy auto-config) -syntaksi

Tietoa

Jos huomaat virheen ohjeessa tai haluat ehdottaa parannusta, jätä viesti Mudfishin keskustelufoorumille (https://forums.mudfish.net). Alkuperäisen ohjeen esimerkit ja selitykset on käännetty tai laadittu seuraavien sivustojen pohjalta:

Mudfishin selainlaajennus tukee PAC-tiedostomuotoa (Proxy auto-config).

PAC-funktiot​

PAC-muotoa tukevat selaimet tarjoavat yleensä Netscapen standardimuodossa määritellyt funktiot.

Funktiot toimivat tavallisesti tiukasti rajoitetussa hiekkalaatikossa. Esimerkiksi User Agent -tietojen tarkastelu on kokonaan estetty.

Alla kuvataan hiekkalaatikossa sallitut funktiot. Koodiesimerkkien alkuperäiset koreankieliset kommentit on säilytetty; niiden merkitys selitetään suomeksi ennen jokaista esimerkkiä.

dnsDomainIs​

Tarkistaa isäntänimen ja palauttaa true, jos se vastaa annettua verkkotunnusta. Tätä käytetään yleensä yksittäisten isäntänimipoikkeusten tarkistamiseen.

Esimerkki ohjaa google.comin ja sen aliverkkotunnukset, kuten maps.google.com ja www.google.com, suoraan ilman välityspalvelinta.

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

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

shExpMatch​

Vertaa isäntänimeä tai URL-osoitetta shell-lausekkeeseen ja palauttaa true, jos ne vastaavat toisiaan.

Esimerkki ohjaa .local-päätteiset pyynnöt suoraan. Myös vpn.domain.com ja kaikki osoitteen http://abcdomain.com/folder/ alaiset tiedostot ja kansiot ohitetaan välityspalvelimelta.

   // 모든 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​

Tarkistaa, kuuluuko isäntänimen IP-osoite annettuun aliverkkoon, ja palauttaa true, jos kuuluu. Jos argumenttina annetaan isäntänimi, se selvitetään IP-osoitteeksi DNS:llä.

Esimerkki käyttää suoraa yhteyttä, jos DNS:llä selvitetty osoite kuuluu annettuun IP-alueeseen.

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

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

myIpAddress​

Palauttaa oman tietokoneen IP-osoitteen.

Esimerkki käyttää välityspalvelinta 10.10.5.1 portissa 8080, jos tietokone kuuluu määritettyyn IP-alueeseen.

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

Muuntaa isäntänimen IP-osoitteeksi DNS-kyselyllä.

Esimerkki käyttää suoraa yhteyttä, jos pyydetyn isännän IP-osoite kuuluu johonkin luetelluista alueista.

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

Palauttaa true, jos isäntänimessä ei ole yhtään pistettä, kuten osoitteessa http://intranet. Tätä käytetään usein sisäverkon verkkosivuihin.

Esimerkki käyttää suoraa yhteyttä tavallisiin isäntänimiin, kuten http://intranet/ ja http://webserver-name01/.

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

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

localHostOrDomainIs​

Tarkistaa isäntänimen ja palauttaa true, jos isäntänimiosa vastaa annettua nimeä.

Esimerkki käyttää suoraa yhteyttä, jos pyydetty isäntänimi on www tai www.google.com.

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

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

isResolvable​

Selvittää isäntänimen IP-osoitteeksi ja palauttaa true, jos se onnistuu.

Jos verkkotunnuksen selvitys ei onnistu, selain voi jähmettyä hetkeksi. Käytä toimintoa harkiten.

Esimerkki käyttää välityspalvelinta proxy1.example.com, jos isäntänimi voidaan selvittää DNS-palvelimella.

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

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

dnsDomainLevels​

Palauttaa isäntänimessä olevien pisteiden määrän. Tätä voi käyttää esimerkiksi sisäverkon verkkopalvelimen poikkeussäännössä.

Esimerkki käyttää välityspalvelinta proxy1.example.com, jos isäntänimessä on vähintään yksi piste; muutoin yhteys muodostetaan suoraan.

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

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

weekdayRange​

Luo aikaan perustuvia sääntöjä esimerkiksi palauttamaan välityspalvelinasetuksen vain tiettyinä viikonpäivinä.

Esimerkki käyttää välityspalvelinta proxy1.example.com maanantaista perjantaihin ja muulloin suoraa internetyhteyttä.

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

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

dateRange​

Luo aikaan perustuvia sääntöjä esimerkiksi käyttämään välityspalvelinta vain tiettyinä kuukausina.

Esimerkki käyttää välityspalvelinta proxy1.example.com tammikuusta maaliskuuhun ja muulloin suoraa yhteyttä.


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

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

timeRange​

Määrittää välityspalvelimen käytön vain tiettyinä vuorokaudenaikoina.

Esimerkki käyttää välityspalvelinta proxy1.example.com vain klo 8–18 ja muulloin suoraa yhteyttä.

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

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

alert​

Toimintoa ei ollut PAC-muodon alkuperäisessä määrittelyssä, mutta Internet Explorer ja Firefox tarjoavat sen vianmääritystä varten.

Esimerkki tulostaa DNS-selvityksen tuloksen selaimen virhekonsoliin.

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

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