PAC-syntaks (Proxy auto-config)
Hvis du finner feil eller har forslag, legg igjen en melding på Mudfish-forumet (https://forums.mudfish.net). Eksemplene og forklaringene bygger på oversettelser eller referanser fra følgende nettsteder:
Mudfish-nettleserutvidelsen støtter PAC-filformatet (Proxy auto-config).
PAC-funksjoner
Nettlesere som støtter PAC, støtter vanligvis funksjonene fra standardformatet definert av Netscape.
Disse funksjonene kjører vanligvis i en sandkasse med strenge begrensninger. Det er for eksempel ikke mulig å undersøke User Agent-informasjon.
Nedenfor beskrives funksjonene som er tillatt i sandkassen. Kodeeksemplene, inkludert de koreanske kommentarene, er bevart fra kilden. Forklaringen før hvert eksempel gjengir kommentarens innhold på norsk bokmål.
dnsDomainIs
Kontrollerer vertsnavnet og returnerer true hvis det samsvarer. Brukes vanligvis for å kontrollere bestemte vertsnavn som unntak.
Eksemplet kobler direkte til google.com og underdomener som maps.google.com og www.google.com, uten proxy.
// 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브 라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Sammenligner et vertsnavn eller en URL med et mønster i shell-syntaks og returnerer true ved treff.
Det første eksemplet kobler direkte til navn som slutter på .local. Det andre kobler direkte til vpn.domain.com og alle mapper og filer under 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
Kontrollerer om IP-adressen til et vertsnavn ligger i et bestemt delnett, og returnerer i så fall true. Hvis argumentet er et vertsnavn, brukes DNS-oppslag for å finne IP-adressen.
Eksemplet kobler direkte til dersom vertens IP-adresse etter DNS-oppslag ligger i det angitte adresseområdet.
// 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
Returnerer IP-adressen til datamaskinen din.
Eksemplet sender forespørselen gjennom proxyen 10.10.5.1 på port 8080 hvis datamaskinen ligger i det angitte IP-området.
// 만약 나의 컴퓨터가 특정 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
Konverterer et vertsnavn til en IP-adresse gjennom DNS-oppslag.
Eksemplet kobler direkte til hvis vertens IP-adresse ligger i ett av de angitte områdene.
// 만약 요청한 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
Returnerer true hvis vertsnavnet ikke inneholder punktum (.). Et eksempel er http://intranet. Dette brukes gjerne for interne webadresser.
Eksemplet kobler direkte til enkle vertsnavn, som http://intranet/ eller http://webserver-name01/.
// 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Kontrollerer vertsnavnet og returnerer true hvis vertsnavndelen samsvarer.
Eksemplet kobler direkte til hvis vertsnavnet er «www» eller «www.google.com».
// 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Forsøker å konvertere vertsnavnet til en IP-adresse og returnerer true hvis det lykkes.
Hvis domenet ikke kan slås opp, kan nettleseren fryse midlertidig. Bruk funksjonen med forsiktighet.
Eksemplet bruker proxy1.example.com dersom vertsnavnet kan slås opp via DNS.
// 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Returnerer antall punktum (.) i vertsnavnet. Kan blant annet brukes til å gjøre unntak for interne webservere.
Eksemplet bruker proxy1.example.com hvis navnet inneholder minst ett punktum; ellers kobler det direkte til.
// 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Brukes til tidsbaserte regler, for eksempel for å returnere en proxyinnstilling bare på bestemte ukedager.
Eksemplet bruker proxy1.example.com fra mandag til fredag og kobler ellers direkte til internett.
// 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Brukes til tidsbaserte regler, for eksempel for å aktivere proxy bare i bestemte måneder.
Eksemplet bruker proxy1.example.com fra januar til mars og kobler ellers direkte til.
// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Brukes for å aktivere proxy bare innenfor bestemte klokkeslett.
Eksemplet bruker proxy1.example.com bare fra kl. 8 til kl. 18 og kobler ellers direkte til.
// 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Denne funksjonen var ikke med da PAC-formatet først ble definert, men finnes i Internet Explorer og Firefox for feilsøking.
Eksemplet skriver resultatet av DNS-oppslaget til nettleserens feilkonsoll.
// 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.
resolved_host = dnsResolve(host);
alert(resolved_host);