PAC (Proxy auto-config) -syntaksi
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);